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 :

requete update avec une condition


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 5
    Points
    5
    Par défaut requete update avec une condition
    bonjour,

    je veux mettre à jour une colonne de mes tables , si la condition where n'est pas validée je veux mettre la colonne à 0 .

    j'ai essayé cette commande , ca marche mais elle ne rend pas à 0 arg si le select ne donne pas de réponse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    update turbo set  arg= (select arg from inject where inject.id_inject=turbo.id_turbo) ;
    j'ai testé cette commande mais je recois des erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    update turbo set arg = CASE
    when (inject.id_inject=turbo.id_turbo) then (select arg from inject )
    else 0
    END ;

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par youtou
    j'ai essayé cette commande , ca marche mais elle ne rend pas à 0 arg si le select ne donne pas de réponse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE turbo 
       SET arg = (SELECT arg 
                    FROM inject 
                   WHERE inject.id_inject=turbo.id_turbo) ;
    Garde cette requête qui fonctionne en cas de correspondance, et adjoins-lui sa petite soeur qui fera le boulot en cas de non correspondance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE turbo 
       SET arg = 0
     WHERE NOT EXISTS (SELECT arg 
                         FROM inject 
                        WHERE inject.id_inject=turbo.id_turbo) ;
    Edit : sinon, sous quel SGBD es-tu ? Avec une fonction de transtypage (Coalesce, Nvl), ça peut le faire en une requête.

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    merci X0 ,
    mais peut etre c pas optimisé ,
    dans ce cas je dois lancer deux requetes sql ! non ?

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    update turbo 
    set  arg = (select coalesce(max(arg), 0) from inject where inject.id_inject=turbo.id_turbo) ;
    COALESCE est une fonction standard...

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    Ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    update turbo set  arg = (select NVL(arg, 0) 
    from inject 
    where inject.id_inject=turbo.id_turbo) ;

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Nadine
    Ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    update turbo set  arg = (select NVL(arg, 0) 
    from inject 
    where inject.id_inject=turbo.id_turbo) ;
    1) NVL est spécifique ORACLE
    2) sans le max, si le select ne ramène pas de ligne, arg sera mis à null et non à 0, malgré le NVL ; avec le max, il y a toujours une ligne, éventuellement nulle, c'est à cette condition que le COALESCE, ou le NVL a une utilité

Discussions similaires

  1. requete sql avec une condition dans une zone de liste
    Par khilim1 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/12/2008, 12h00
  2. Réponses: 10
    Dernier message: 26/03/2008, 15h00
  3. Requete update avec jointure d'une requête
    Par bart64 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 28/05/2007, 20h31
  4. Requete avec une condition sur le resultat [10g]
    Par hotkebab99 dans le forum Oracle
    Réponses: 5
    Dernier message: 12/09/2006, 11h33
  5. Faire un update avec une ss requete renvoyant plusieur row
    Par djodjo dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/09/2005, 15h51

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