如何选择归国结果(How to SELECT the result of RETURNING)

2019-10-29 06:24发布

如何把一个结果RETURNING子句为SELECT PostgreSQL中? 也就是说,我想SELECT语句返回任何RETURNING回报。

我曾尝试以下两种语法,他们都不工作:

(1) SELECT (INSERT INTO ... RETURNING *)

(2) SELECT * FROM (INSERT INTO ... RETURNING *) ...

你可能会问,为什么我试图做到这一点,尽管RETURNING已经给我想要的结果? 这是因为我有利用两个结构WITH条款,并插入将是第二个,但我也需要第一个结果。 (请参阅相关的问题 。)

备注:很遗憾,我不能提供具体的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 *

Answer 1:

insert ... returning *将已经返回结果集,没有必要对一个SELECT语句添加到它。

但是,如果你坚持,你可以做

with i as (
   INSERT INTO test VALUES (1, 'Joe') 
   RETURNING *
)
select *
from i;

但是,这正好返回同样的事情:

INSERT INTO test VALUES (1, 'Joe') 
RETURNING *


文章来源: How to SELECT the result of RETURNING