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
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    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é
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    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.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    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
    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 confirmé
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    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
    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