sql >> Databasteknik >  >> RDS >> Mysql

MySQL CASE...WHERE...DÅ uttalanden

Det är inte det CASE måste ha mer än en, WHEN...THEN , det är att den måste hantera all data du ger den.

Om du tog bort en av klausulerna lämnar du ett hål. t.ex.

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

Med denna uppdateringssats, om parkFK är 2, då misslyckas uppdateringen eftersom CASE inte kan hantera inmatningen.

Du kan antingen begränsa dina källdata genom att lägga till ytterligare en rad till din where-klausul (t.ex. AND partFK in (1,2) ), eller så kan du lägga till en ELSE till kasusuttrycket.

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

Men baserat på SQL-satsen du har visat finns det förmodligen ett bättre sätt. Förmodligen är partFK en främmande nyckel till något annat bord. Kan du dra värdet för quantity därifrån?



  1. Minska databasanrop för att förbättra webbplatsens prestanda

  2. Förbryllande php/Mysql Time aritmetiska beteende

  3. SQL-fråga för att ta bort tabell i MySQL

  4. IF-syntaxfel