PostgreSql – > CTE UPDATE DELETE – >不是预期的结果,
只是感兴趣,为什么下面(简化)示例以这种方式工作.
CREATE TABLE test (id SERIAL,val INT NOT NULL,PRIMARY KEY(id)); INSERT INTO test (val) VALUES (1); WITH t AS ( UPDATE test SET val = 1 RETURNING id ) DELETE FROM test WHERE id IN ( SELECT id FROM t); 结果: 题: PostgreSql版本9.2.1 谢谢!
我怀疑它与
docs这条线有关系 –
虽然我认为ID可能是可用的,因为它在WITH子查询中没有更改,但可能会有一些行可见性.术语“未指定”是非常模糊的,这可能是postgres列表的一个问题,所以一个大师可以有一个裂缝… 编辑:为了提供更多的信息,我也尝试用SELECT *替换DELETE,并返回预期的行.我的立即反应是,如果可以找到返回它们的行,那么应该可以找到它们来删除它们.但是,如果我再考虑一下,此测试支持引用,因为与非数据修改语句配对的数据修改语句会产生预期结果,而两个数据修改语句会产生意想不到的结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |