当尝试运行此查询时,我的假设是 PostgreSQL 将在 id=0 且初始 counter=0 的行上运行更新两次,最终计数器=11,但它实际上只运行一次并导致 counter=6 。
有人可以帮忙找出原因吗?我花了很多时间试图解决这个问题,但似乎无法弄清楚为什么会这样。
with duplicatedids as
((select 0 as idx, 6 as v) union
(select 1 as idx, 5 as v))
update verify_seq_update
set counter = counter + duplicatedids.v
from duplicatedids
where verify_seq_update.id <= duplicatedids.idx ;
An
UPDATE
可以修改多行,但每行只能修改一次。有关更详细的解释,请参阅
UPDATE
Postgres 文档的部分: