使用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;
我确定我之前已经做过,或者我忽略了一些明显的事情。
是否可以这样做?如果可以,怎么办?
答案 0 :(得分:1)
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
可以从查询的更新行以及来自列表返回字段。