从查询中返回用于INSERT值的字段

时间:2019-05-20 07:04:36

标签: postgresql

使用SELECT查询为INSERT生成值时,如下所示:

INSERT INTO some_table (
  foo,
  bar
)
SELECT
  at.foo,
  at.bar
FROM another_table at;

如何返回SELECT子句中的RETURNING查询中的字段以及新插入的行?像这样:

INSERT INTO some_table AS t (
  foo,
  bar
)
SELECT
  at.foo,
  at.bar
FROM another_table at
RETURNING t.id, at.id;

我确定我之前已经做过,或者我忽略了一些明显的事情。

是否可以这样做?如果可以,怎么办?

2 个答案:

答案 0 :(得分:1)

demo: db<>fiddle

WITH selecting AS (
    SELECT id, x FROM a 
), inserting AS (
    INSERT INTO b AS b (y) 
    SELECT x FROM selecting
    RETURNING id, y
)
SELECT
    i.id, 
    s.id
FROM 
    inserting i
JOIN
    selecting s
ON i.y = s.x

您可以尝试CTE方法。首先选择所有相关数据,将结果存储在内部。之后,对这些数据执行INSERT语句,在内部存储RETURNING值。毕竟,您可以保存所有数据,将它们与联接结合起来并打印出所需的内容。

答案 1 :(得分:0)

不可能从提供INSERT值的查询中返回字段。您只能返回新插入的行中的字段。

UPDATE可以从查询的更新行以及来自列表返回字段。