我一直在寻找答案,它似乎是确定的,但我想我会仔细检查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。
答案 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)
我不知道为什么在问题中陈述的方式无效,但至少这是有效的。