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

MySQL AGGIORNA condizionalmente i valori delle colonne booleane delle righe in base a una whitelist di ID

Non hai dimenticato di fare un "ALTRO" nella dichiarazione 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

Senza ELSE, presumo che la catena di valutazione si fermi all'ultimo QUANDO ed esegua l'aggiornamento. Inoltre, non stai limitando le righe che stai tentando di aggiornare; se non esegui l'ELSE dovresti almeno dire all'aggiornamento di aggiornare solo le righe che desideri e non tutte le righe (come stai facendo). Guarda la clausola WHERE di seguito:

  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)