sql >> Database >  >> RDS >> Mysql

MySQL CASE...WHERE...THEN statements

Het is niet dat de CASE moet meer dan één hebben, WHEN...THEN , het is dat het alle gegevens moet verwerken die je het geeft.

Als je een van de clausules hebt verwijderd, laat je een gat achter. bijv.

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

Met deze update-instructie, als parkFK is 2, dan mislukt de update omdat de CASE de invoer niet aankan.

U kunt uw brongegevens beperken door een andere regel toe te voegen aan uw waar-clausule (bijv. AND partFK in (1,2) ), of u kunt een ELSE . toevoegen naar de hoofdletteruitdrukking.

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

Op basis van de SQL-instructie die u hebt getoond, is er echter waarschijnlijk een betere manier. Vermoedelijk is partFK een refererende sleutel naar een andere tabel. Kun je de waarde ophalen voor quantity vanaf daar?



  1. PG::UndefinedTable:ERROR:relatie bestaat niet met een juiste Rails-naamgeving en -conventie

  2. MySQL maakt tijd en update tijdstempel

  3. SQL Server:verschil tussen PARTITION BY en GROUP BY

  4. Hoe Coalesce() werkt in SQLite