sql >> Database teknologi >  >> RDS >> Mysql

MySQL CASE...HVOR...SÅ udsagn

Det er ikke det CASE skal have mere end én, WHEN...THEN , det er, at den skal håndtere alle de data, du giver den.

Hvis du fjernede en af ​​klausulerne, efterlader du et hul. f.eks.

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

Med denne opdateringserklæring, hvis parkFK er 2, så mislykkes opdateringen, fordi CASE'en ikke kan håndtere inputtet.

Du kan enten begrænse dine kildedata ved at tilføje endnu en linje til din where-klausul (f.eks. AND partFK in (1,2) ), eller du kan tilføje en ELSE til kasusudtrykket.

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

Men baseret på den SQL-sætning, du har vist, er der sandsynligvis en bedre måde. Formentlig er partFK en fremmednøgle til et andet bord. Kan du trække værdien for quantity derfra?



  1. SQLite have

  2. Hvorfor er det hurtigere at udføre lagrede procedurer end SQL-forespørgsler fra et script?

  3. Vælg en kolonne med et nøgleordsnavn

  4. Hekaton med et twist:In-memory TVPs – Del 3