相关疑难解决方法(0)

为什么不能在同一语句中更新插入 CTE 中的行?

在 PostgreSQL 9.5 中,给定一个使用以下方法创建的简单表:

create table tbl (
    id serial primary key,
    val integer
);
Run Code Online (Sandbox Code Playgroud)

我运行 SQL 来插入一个值,然后在同一个语句中更新它:

WITH newval AS (
    INSERT INTO tbl(val) VALUES (1) RETURNING id
) UPDATE tbl SET val=2 FROM newval WHERE tbl.id=newval.id;
Run Code Online (Sandbox Code Playgroud)

结果是 UPDATE 被忽略:

testdb=> select * from tbl;
????????????
? id ? val ?
????????????
?  1 ?   1 ?
????????????
Run Code Online (Sandbox Code Playgroud)

为什么是这样?这个限制是 SQL 标准的一部分(即存在于其他数据库中),还是特定于 PostgreSQL 可能在未来修复的部分?在使用查询文件说,多次更新不支持,但没有提到INSERT和UPDATE。

postgresql cte

17
推荐指数
2
解决办法
6053
查看次数

标签 统计

cte ×1

postgresql ×1