Ответ 1
Разве вы не забыли сделать "ELSE" в заявлении 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
Без ELSE, я предполагаю, что цепочка оценки останавливается на последнем WHEN и выполняет это обновление. Кроме того, вы не ограничиваете строки, которые вы пытаетесь обновить; если вы не делаете ELSE, вы должны хотя бы сообщить об этом обновлению только для обновления строк, а не всех строк (как вы это делаете). Посмотрите на предложение 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)