sql >> Base de Datos >  >> RDS >> Mysql

MySQL ACTUALIZA condicionalmente los valores de las columnas booleanas de las filas en función de una lista blanca de identificadores

¿No te olvidaste de hacer "ELSE" en la declaración del caso?

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

Sin ELSE, asumo que la cadena de evaluación se detiene en el último CUÁNDO y ejecuta esa actualización. Además, no está limitando las filas que está intentando actualizar; si no hace ELSE, al menos debe decirle a la actualización que solo actualice las filas que desea y no todas las filas (como lo está haciendo). Mire la cláusula WHERE a continuación:

  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)