IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

update d'un seul champ


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut update d'un seul champ
    Bonjour, j'ai un pb avec une requete SQL

    voici ma table :

    ID champ1
    1 YD
    2 truc
    3 truc
    4 YD
    5 YD
    6 truc

    je dois updater mes champs ID avec une valeur "toto" quand j'ai YD, mais seulement pour les deux premiers ! c à dire que je dois avoir au final :

    ID champ1
    toto YD
    2 truc
    3 truc
    toto YD
    5 YD
    6 truc

    Je ne dois pas avoir toto dans le champ 5 !! seulement dans le premier et le deuxieme. Evidemment j'ai plusieurs config, une fois j'ai 6 ID, une autre fois j'en ai 9....., sinon ca serait facile
    Comment faire ?? merci

  2. #2
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut
    Quel SGBDR? Essaie avec ROWNUM...

  3. #3
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    je fai ca avec sql server dans une procedure stockée

  4. #4
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut
    Je ne connais pas bien sql server, mais essaie ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE ta_table SET ID='toto' WHERE champ1 IN (SELECT champ1 FROM ta_table WHERE champ1='truc') AND ROWNUM=1 OR ROWNUM=2;

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Par défaut
    Sous SQL serveur je sais pas mais en pl/sql il suffit de gérer par un curseur trié.

    Enfin si j'ai bien compris ton prob

  6. #6
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut
    Théoriquement, la requête que je t'ai donné marche, en tout cas sous Oracle. Redonne-moi des nouvelles si tout va bien.

    Et si tu as résolu ton problème, n'oublie pas le bouton [résolu]

    [EDIT]
    Citation Envoyé par cosmos38240
    en pl/sql il suffit de gérer par un curseur trié.
    Tu as plus simple... En sql brut. Exemple: ma requête.
    [/EDIT]

  7. #7
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    ROWNUM n'as pas l'air de fonctionner sous sql server

    par contre est ce qu'il est possible de faire ca :

    UPDATE cetteTable SET blabla WHERE blabla AND champID de l'enregistrement suivant <> 1 ????

  8. #8
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut
    Bah non, ça va t'updater partout ou l'ID est différent de 1...

  9. #9
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut
    Allez, comme c'est noël, j'ai un petit cadeau pour toi...
    Regarde ici

    Enfin, c'est surtout parce que c'est bientôt les vacances et j'ai plus trop envie de bosser

    Si tu n'arrive pas malgré ce site, dis-le moi, et je m'y mettrai...

  10. #10
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    nan je pense pas parce que j'ai crée un curseur qui selectionne que certains enregistrement, donc ceux qui ne sont pas selectionné, je n'y touche pas

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 14
    Par défaut
    Je ne connais pas bien sql server, mais essaie ça:

    Code:
    UPDATE ta_table SET ID='toto' WHERE champ1 IN (SELECT champ1 FROM ta_table WHERE champ1='truc') AND ROWNUM=1 OR ROWNUM=2;
    Un peu plus condensé, ce code donne le même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE ta_table 
    SET ID='toto' 
    WHERE champ1 ='YD' AND (ROWNUM=1 OR ROWNUM=2);
    Ou encore tu peux essayer ça si Rownum est spécifique à Oracle (mais je sais pas, et la requête qui suit est moins belle que la requête donnée par Cerberes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    update <table> a 
    set a.ID = 'toto' where a.champ1 = 'YD' and (select count(*) from <table> b where b.champ1 = 'YD' and b.ID <= a.ID) < 3
    A +

    PS : exellent le lien Cerberes ! Je cherchais justement un truc dans le genre.
    Merci !

  12. #12
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut
    Citation Envoyé par Pipiouw
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    update <table> a 
    set a.ID = 'toto' where a.champ1 = 'YD' and (select count(*) from <table> b where b.champ1 = 'YD' and b.ID <= a.ID) < 3
    Marche pas chez moi...
    Citation Envoyé par Pipiouw
    PS : exellent le lien Cerberes ! Je cherchais justement un truc dans le genre. Merci !
    Mais de rien... Content que ça te plaise!

  13. #13
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut
    Mais attends... Si tu peux créer un curseur (je l'ignorais), alors essaie de créer un curseur qui parcours tous les enregistrements ou ton champ1=test.
    Mets ton curseur dans une boucle.
    A chaque passage de la boucle, incrémente une variable.
    Fait tes ordres update
    Sors de la boucle lorsque la variable est à 2

  14. #14
    Membre expérimenté
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Par défaut
    tu peux faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    update tatable
    set id='toto'
    where id<= (select min(id) from tatable
                       where id <>(select Min(id) from tatable
                                          where champ1 = 'YD' )
                      and champ1 = 'YD' 
                     )
    and champ1 = 'YD'
    A+

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 14
    Par défaut
    Marche pas chez moi...
    Ah bon... comprends pas... chez moi ça fonctionne. J'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    SQL> select * from <table>;
    Col1             Col2
    ---------------- ---------------------------------
                   1 YD
                   2 YDE
                   3 YD
                   4 YD
                   5 YD
                   6 AYD
                   7 AYD
                   8 YD
                   9 YD
                  10 YD
     
    10 ligne(s) sélectionnée(s).
     
    SQL>  update <table> a
      2   set a.col1 = 111
      3   where a.col2 = 'YD'
      4   and (select count(*) from <table> b
      5        where b.col2 = 'YD'
      6*       and b.col1 <= a.col1) < 3
     
    2 ligne(s) mise(s) à jour.
     
    SQL> select * from <table>;
     
    col1             col2
    ---------------- ---------------------------------
                 111 YD
                   2 YDE
                 111 YD
                   4 YD
                   5 YD
                   6 AYD
                   7 AYD
                   8 YD
                   9 YD
                  10 YD
     
    10 ligne(s) sélectionnée(s).
    Je comprends pas...

  16. #16
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut
    MAMMAR: Pas bête, je n'y avais pas pensé...

    Pipiouw: Pas grave, je n'ai pas précisé que je travaillais sous Oracle...

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 14
    Par défaut
    Pipiouw: Pas grave, je n'ai pas précisé que je travaillais sous Oracle...
    ... moi aussi je bosse sous Oracle (9.i)... comprends plus...

  18. #18
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut
    Citation Envoyé par Pipiouw
    ... moi aussi je bosse sous Oracle (9.i)... comprends plus...
    Alors là, moi non plus... Je n'ai plus le temps de regarder ça, c'est dommage... On verra ça lundi...

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 14
    Par défaut
    D'acc ! Mais ne te casses pas la tête non plus . Tant que Hulk a réussi à faire son update, c'est le principal !

    Au fait Hulk... ... une des solutions fonctionne pour toi au moins ??

  20. #20
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut
    Citation Envoyé par Pipiouw
    D'acc ! Mais ne te casses pas la tête non plus
    Compte sur moi!

    Non, plus sérieusement, ce problème m'intrigue... Je regarderai tout ça dans la soirée chez moi, si j'ai le temps...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Updater un seul champ dans un seul record
    Par raymon dans le forum ASP
    Réponses: 3
    Dernier message: 24/08/2007, 14h19
  2. Réponses: 13
    Dernier message: 20/07/2004, 08h54
  3. Réponses: 2
    Dernier message: 30/06/2004, 13h22
  4. Pb Sub-request : ne s'applique pas a un seul champ
    Par zubral dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/05/2004, 10h31
  5. enregistrer deux variable différente dans un seul champs
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 7
    Dernier message: 07/03/2004, 23h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo