Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL aktualisiert bedingt die booleschen Spaltenwerte der Zeilen basierend auf einer Whitelist von IDs

Hast du nicht vergessen, ein "ELSE" in die case-Anweisung zu setzen?

UPDATE my_table
    SET field = CASE
        WHEN id IN (/* true ids */) THEN TRUE
        WHEN id IN (/* false ids */) THEN FALSE
        ELSE field=field 
    END

Ohne ELSE gehe ich davon aus, dass die Bewertungskette beim letzten WHEN stoppt und diese Aktualisierung ausführt. Außerdem begrenzen Sie nicht die Zeilen, die Sie aktualisieren möchten; Wenn Sie ELSE nicht ausführen, sollten Sie das Update zumindest anweisen, nur die gewünschten Zeilen und nicht alle Zeilen zu aktualisieren (wie Sie es tun). Sehen Sie sich die WHERE-Klausel unten an:

  UPDATE my_table
        SET field = CASE
            WHEN id IN (/* true ids */) THEN TRUE
            WHEN id IN (/* false ids */) THEN FALSE
        END
  WHERE id in (true ids + false_ids)