如何将RETURNING
子句的结果放入PostgreSQL中的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 *
insert ... returning *
已经返回结果集,不需要向它添加SELECT语句。
但如果你坚持,你可以做到
with i as (
INSERT INTO test VALUES (1, 'Joe')
RETURNING *
)
select *
from i;
但是,它返回的完全相同:
INSERT INTO test VALUES (1, 'Joe')
RETURNING *