Czy nie zapomniałeś zrobić „INNEGO” w opisie sprawy?
UPDATE my_table
SET field = CASE
WHEN id IN (/* true ids */) THEN TRUE
WHEN id IN (/* false ids */) THEN FALSE
ELSE field=field
END
Bez ELSE zakładam, że łańcuch oceny zatrzymuje się na ostatnim KIEDY i wykonuje tę aktualizację. Ponadto nie ograniczasz wierszy, które próbujesz zaktualizować; jeśli nie zrobisz INNEGO, powinieneś przynajmniej powiedzieć aktualizacji, aby aktualizowała tylko żądane wiersze, a nie wszystkie wiersze (tak jak robisz). Spójrz na poniższą klauzulę WHERE:
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)