如何选择返回结果

时间:2019-02-20 16:19:56

标签: sql postgresql insert-into sql-returning

如何在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 *

1 个答案:

答案 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 *