LINUX.ORG.RU

Просто сделать два update в одной транзакции.
Это не повторение, и не вопрос - это и есть ответ.

sanwashere ★★
()

Может ты хотел сказать «в одной команде»? Можно так извратиться, но смысла особо нет. Просто сделай 2 апдейта и не выёживайся.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
begin
update scott.table set field = 0 where id = 1;
update scott.table set field = 0 where id = 2;
commit;
end;
crutch_master ★★★★★
()

Вообще говоря, здесь правильно уже написали

Просто сделать два update в одной транзакции.
Это не повторение, и не вопрос - это и есть ответ.

Но если очень хочется, то можно что-то вроде (для id=12345 ставим значение 10, для id=67890 ставим значение 20):

update table
   set value = case id when 12345 then 10 when 67890 then 20 end
 where id in (12345, 67890)

но вопрос «зачем» всё равно актуален :)

P.S. В принципе, это может понадобиться, если у вас идёт полное сканирование таблицы (в условии where используется неиндексированное поле), но всё-таки надо сначала подумать об индексе, если такой апдейт нужен часто.

Qasta
()
Последнее исправление: Qasta (всего исправлений: 1)

Конечно. Для этого транзакции и предназначены (что бы другой клиент не влез между двумя этими апдейтами).

dvetutnev
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.