INSERT INTO ...返回多列(PostgreSQL)

时间:2013-12-11 00:42:30

标签: sql postgresql

我一直在寻找答案,它似乎是确定的,但我想我会仔细检查Stack Overflow社区:
这就是我想要做的事情:

INSERT INTO my_table VALUES (a, b, c)
RETURNING (SELECT x, y, z FROM x_table, y_table, z_table
WHERE xid = a AND yid = b AND zid = c)

我收到一个错误,告诉我我不能返回多个列。
如果我告诉它SELECT x FROM x_table WHERE xid = a,它就有效。

这是否可以在单个查询中完成,而不是创建单独的SELECT查询?

我正在使用PostgreSQL 8.3。

2 个答案:

答案 0 :(得分:12)

试试这个。

with aaa as (
    INSERT INTO my_table VALUES(a, b, c)
    RETURNING a, b, c)
SELECT x, y, z FROM x_table, y_table, z_table
WHERE xid = (select a from aaa)
  AND yid = (select b from aaa)
  AND zid = (select c from aaa);

在9.3类似的查询工作中。

答案 1 :(得分:4)

@corvinusz回答错误,但是给了我一个好主意,非常感谢!

INSERT INTO my_table VALUES (a, b, c)
RETURNING (SELECT x FROM x_table WHERE xid = a),
  (SELECT y FROM y_table WHERE yid = b),
  (SELECT z FROM z_table WHERE zid = c)

我不知道为什么在问题中陈述的方式无效,但至少这是有效的。