Как объединить два отдельных оператора обновления SQL в одной таблице в одну команду? - PullRequest
0 голосов
/ 17 сентября 2018
UPDATE table SET val1 = val1 + 1 where (val1 < $1 AND val1 >= ($1-$3));
update table set (val1,val2) = (val1 - $3, val2 + 1) WHERE val3 = $2 RETURNING %s

К сожалению, это приводит к ошибке "невозможно вставить несколько команд в подготовленный оператор". Есть ли способ объединить эти два утверждения в одно?

1 Ответ

0 голосов
/ 17 сентября 2018

Да. В Postgres вы можете использовать CTE:

with u1 as (
      update table set val1 = val1 + 1 where (val1 < $1 AND val1 >= ($1-$3))
     ),
     u2 as (
      update table set (val1,val2) = (val1 - $3, val2 + 1) WHERE val3 = $2 RETURNING %s
     )
select *
from u2;
...