Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我看不到CTE的变化?_Sql_Postgresql_Common Table Expression - Fatal编程技术网

Sql 为什么我看不到CTE的变化?

Sql 为什么我看不到CTE的变化?,sql,postgresql,common-table-expression,Sql,Postgresql,Common Table Expression,为什么我仍然在y CTE子查询中看到已删除的行?由于y依赖于x,所以x和y部分应按顺序执行。你能解释一下为什么我看不到x的变化吗?我该怎么做才能看到他们 我不确定它是否与隔离级别有关,因为所有操作都是在同一个查询=>同一个事务中完成的 谢谢 该行为记录在: 中的子语句与每个子语句同时执行 与主查询的其他和。因此,在使用数据修改时 语句,指定更新的顺序 事实上,事情的发生是不可预测的。所有语句都使用 看到相同的快照,因此 无法在目标表上看到彼此的效果 要从表中删除并在一个查询中获得表架构的空结

为什么我仍然在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;