Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL met à jour conditionnellement les valeurs des colonnes booléennes des lignes en fonction d'une liste blanche d'identifiants

N'avez-vous pas oublié de faire un "SINON" dans l'instruction case ?

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

Sans le ELSE, je suppose que la chaîne d'évaluation s'arrête au dernier QUAND et exécute cette mise à jour. De plus, vous ne limitez pas les lignes que vous essayez de mettre à jour ; si vous ne faites pas le ELSE, vous devez au moins indiquer à la mise à jour de ne mettre à jour que les lignes souhaitées et non toutes les lignes (comme vous le faites). Regardez la clause WHERE ci-dessous :

  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)