Mysql
 sql >> Base de données >  >> RDS >> Mysql

Instructions MySQL CASE...WHERE...THEN

Ce n'est pas que le CASE doit en avoir plus d'un, WHEN...THEN , c'est qu'il doit gérer toutes les données que vous lui donnez.

Si vous supprimez l'une des clauses, vous laissez un vide. ex.

UPDATE partsList SET quantity =  
CASE
  WHEN partFK = 1 THEN 4
END
WHERE buildFK = 1;

Avec cette instruction de mise à jour, if parkFK est 2, la mise à jour échoue car le CASE ne peut pas gérer l'entrée.

Vous pouvez soit limiter vos données source en ajoutant une autre ligne à votre clause where (par exemple, AND partFK in (1,2) ), ou vous pouvez ajouter un ELSE à l'expression de cas.

UPDATE partsList SET quantity =  
CASE
  WHEN partFK = 1 THEN 4
  WHEN partFK = 2 THEN 8
  ELSE 12 
END
WHERE buildFK = 1;

Cependant, sur la base de l'instruction SQL que vous avez montrée, il existe probablement un meilleur moyen. Vraisemblablement, partFK est une clé étrangère vers une autre table. Pouvez-vous tirer la valeur de quantity à partir de là ?