gpt4 book ai didi

sql - 无法从 postgres 中的 UPDATE RETURNING 子句中选择

转载 作者:行者123 更新时间:2023-11-29 11:11:53 25 4
gpt4 key购买 nike

我将问题从更复杂的查询中分离出来。这里是测试场景

DROP TABLE test; 
CREATE TABLE test (
id integer,
description varchar(100)
);

INSERT INTO test(id, description) VALUES (1,'new');
INSERT INTO test(id, description) VALUES (2,'new');

如果我运行查询:

SELECT * FROM test WHERE id IN (UPDATE test set description='test' RETURNING id)

我收到以下错误:

错误:“test”处或附近的语法错误LINE 1: SELECT * FROM test WHERE id (UPDATE test set description='test' RE ... ^

*** 费勒 strong>***

错误:“test”处或附近的语法错误SQL状态:42601泽臣:37

但是如果我只运行语句

UPDATE test set value='test' RETURNING id

我得到一个包含 2 行的结果:

12

如果我用这个结果代替,我会有这样的查询:

SELECT * FROM test WHERE id IN (1,2);

结果:

1;"测试"2;"测试"

为什么我的初始陈述没有得到相同的结果?

最佳答案

在 PostgreSQL 9.1 之前,INSERT/UPDATE/DELETE 只能用作顶级语句。这就是您收到语法错误的原因。

从 9.1 开始,您可以将数据修改语句与公用表表达式一起使用。您的示例查询如下所示:

WITH updated AS (UPDATE test SET description = 'test' RETURNING id)
SELECT * FROM test WHERE id IN (SELECT id FROM updated);

从刚刚修改的表格中进行选择时要小心。这样你会得到令人困惑的结果。因为查询是在同一个快照中执行的,所以 SELECT 将看不到 UPDATE 语句的效果。

关于sql - 无法从 postgres 中的 UPDATE RETURNING 子句中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7191902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com