首页 > 解决方案 > 如何将同一表上的两个单独的 SQL 更新语句合并为一个命令?

问题描述

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

不幸的是,这给出了错误“无法将多个命令插入准备好的语句”。有没有办法将这两个语句合并为一个?

标签: sqlpostgresqlplpgsql

解决方案


是的。在 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;

推荐阅读