如何在PostgreSQL中将RETURNING
子句的结果放入SELECT
中?也就是说,我希望SELECT
语句返回RETURNING
返回的任何内容。
我尝试了以下两种语法,但它们似乎都不起作用:
(1) SELECT (INSERT INTO ... RETURNING *)
(2) SELECT * FROM (INSERT INTO ... RETURNING *) ...
您可能会问,尽管RETURNING
已经给了我想要的结果,但为什么我还是要这样做?
这是因为我有一个使用两个WITH
子句的结构,并且插入将在第二个子句中,但是我也需要第一个子句的结果。 (请参见related question。)
备注:不幸的是,我无法提供具体的SQL查询(因为它是在封闭源产品中),但是我认为这个问题足够通用,无需此具体查询就可以回答。
编辑添加了示例:
假设我们有此表:
CREATE TABLE test(id INT, name VARCHAR)
这有效:
INSERT INTO test VALUES (1, 'Joe') RETURNING *
我正在尝试做的,但是不起作用:
SELECT INSERT INTO test VALUES (1, 'Joe') RETURNING *
SELECT * FROM INSERT INTO test VALUES (1, 'Joe') RETURNING *
答案 0 :(得分:1)
insert ... returning *
将已经返回结果集,无需向其添加SELECT语句。
但是,如果您坚持要这样做,
with i as (
INSERT INTO test VALUES (1, 'Joe')
RETURNING *
)
select *
from i;
但是返回的内容与以下内容完全相同:
INSERT INTO test VALUES (1, 'Joe')
RETURNING *