web-dev-qa-db-fra.com

MISE À JOUR conditionnelle dans MySql

J'essaye de METTRE À JOUR des valeurs d'une table mais j'ai besoin d'ajouter quelques conditions. J'ai trouvé la fonction CASE mais je ne le suis pas si c'est la meilleure méthode. Voici un exemple:

Ma table est par exemple 'relation'

 id_utilisateur1 | id_utilisateur2 | nom1 | nom2 

J'ai par exemple:

SELECT * 
  FROM realtion 
 WHERE (userid1 = 3 AND userid2 = 4)
    OR (userid1 = 4 AND userid2 = 3);  

Production:

     
 4 | 3 | bill | jack 

et je veux changer le nom de l'utilisateur 3 dans la relation entre 3 et 4 mais je ne sais pas s'il s'agit de l'ID utilisateur1 ou de l'ID utilisateur2.

J'ai pensé au cas

UPDATE relation 
   CASE WHEN userid1 = 3 THEN SET name1 = 'jack' END 
        WHEN userid2 = 3 THEN SET name2 = 'jack' END 
 WHERE (userid1 = 3 AND userid2 = 4) 
    OR (userid1 = 4 AND userid2 = 3);

Mais ça ne marche pas! Des idées? Merci d'avance.

26
Pierre Lebon

Malheureusement, ce que vous voulez obtenir au final n'est pas très clair, mais voici comment utiliser correctement SET conditionnel dans votre UPDATE

UPDATE relation 
   SET name1 = CASE WHEN userid1 = 3 THEN 'jack' ELSE name1 END,
       name2 = CASE WHEN userid2 = 3 THEN 'jack' ELSE name2 END
WHERE (userid1 = 3 AND userid2 = 4) 
   OR (userid1 = 4 AND userid2 = 3);

Voici SQLFiddle démo.

48
peterm