Я пытаюсь массово обновить некоторые строки в postgres. Теперь не все строки должны обновлять одинаковые значения столбцов. Например, строка 1 должна обновлять столбцы 1 и 3, тогда как строка 2 должна обновлять столбцы 2 и 4. поэтому строки 1 и 2 столбца не должны изменяться, а строки 1 и 3 столбца 2 не должны изменяться.
Я попытался использовать CASE
s для условного SET
правильного значения столбца, но он не работает с несколькими строками. Это работает, если я пытаюсь обновить только 1 строку за раз.
update topic as tmp set
"from" = (CASE WHEN tmp2."from2"::text = 'OLD_VALUE' THEN tmp."from"::int2 ELSE tmp2."from2"::int2 end),
"text_search" = (CASE WHEN tmp2."text_search2"::text = 'OLD_VALUE' THEN tmp."text_search"::text ELSE tmp2."text_search2"::text end),
"weight" = (CASE WHEN tmp2."weight2"::text = 'OLD_VALUE' THEN tmp."weight"::numeric ELSE tmp2."weight2"::numeric end)
from (values
(1051,1,'Electronic Devices',3),
(1052,'OLD_VALUE','OLD_VALUE',100)
) as tmp2("id2","from2","text_search2","weight2")
where tmp2."id2" = tmp."id"
Это сообщение об ошибке, которое я получаю
Ошибка SQL [22P02]: ОШИБКА: неверный синтаксис ввода для типацелое число: "OLD_VALUE"
Когда я пытаюсь использовать только 1 FROM
значение
from (values (1051,1,'Electronic Devices',3))
или
from (values (1052,'OLD_VALUE','OLD_VALUE',100))
, оно работает правильно.
Он даже работает правильно, если требуется обновить одни и те же столбцы, например.
from (values
(1051,1,'Electronic Devices',3),
(1052,2,'Topic 2',100)
)
Почему он не работает правильно, когда мне нужно обновить разные столбцы для каждой строки?