【发布时间】:2019-11-26 08:09:09
【问题描述】:
with
u1 as (
update todel set val=val+1 where id='key' returning *
),
u2 as (
update todel set val=val+2 where id='key' returning *
)
select * from u1
union all
select * from u2
;
预期的结果是两行,但我得到了一个,
id | val
-----+-----
key | 11
为什么会这样,我错过了什么?服务器是 pg 9.6.6
【问题讨论】:
-
是的,
union all不会删除重复项。 -
您正在 id = key in 2 CTE 中进行更新,但更新将发生在单行上。我认为它不会保持为 2 行 @Сухой27
-
这可能与第二个 CTE 没有看到第一个 CTE 所做的更改有关。
-
另外,看起来第二个 CTE 返回空集,这是出乎意料的(对我来说)。
-
我需要一些明确的事务隔离级别吗?
标签: sql postgresql sql-update common-table-expression