Sql 为什么我看不到CTE的变化?
为什么我仍然在y CTE子查询中看到已删除的行?由于y依赖于x,所以x和y部分应按顺序执行。你能解释一下为什么我看不到x的变化吗?我该怎么做才能看到他们 我不确定它是否与隔离级别有关,因为所有操作都是在同一个查询=>同一个事务中完成的Sql 为什么我看不到CTE的变化?,sql,postgresql,common-table-expression,Sql,Postgresql,Common Table Expression,为什么我仍然在y CTE子查询中看到已删除的行?由于y依赖于x,所以x和y部分应按顺序执行。你能解释一下为什么我看不到x的变化吗?我该怎么做才能看到他们 我不确定它是否与隔离级别有关,因为所有操作都是在同一个查询=>同一个事务中完成的 谢谢 该行为记录在: 中的子语句与每个子语句同时执行 与主查询的其他和。因此,在使用数据修改时 语句,指定更新的顺序 事实上,事情的发生是不可预测的。所有语句都使用 看到相同的快照,因此 无法在目标表上看到彼此的效果 要从表中删除并在一个查询中获得表架构的空结
谢谢 该行为记录在: 中的子语句与每个子语句同时执行 与主查询的其他和。因此,在使用数据修改时 语句,指定更新的顺序 事实上,事情的发生是不可预测的。所有语句都使用 看到相同的快照,因此 无法在目标表上看到彼此的效果 要从表中删除并在一个查询中获得表架构的空结果,只需在CTE中删除并使用false WHERE子句从表中选择即可
create table tab(id int);
insert into tab(id) values(1);
with x as (delete from tab where id = 1 returning id),
y as (select * from tab where id in (select id from x))
select * from y;
-- outputs a row with "1"
-- i need no rows returned
WITH
cte
AS
(
DELETE FROM tab
WHERE id = 1
)
SELECT *
FROM tab
WHERE false;