2013-12-11 91 views
5

我搜索了一個答案,它似乎是權威性的,但我想我會仔細檢查堆棧溢出社區:
這是我想要做的:INSERT INTO ...返回多列(PostgreSQL)

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。

回答

4

@corvinusz答案是錯誤的8.3,但給了我一個偉大的想法,工作非常感謝!

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) 

我不知道爲什麼它在問題中陳述的方式是無效的,但至少這是有效的。

9

試試這個。

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中類似的查詢工作。

+0

不好。就像我提到的那樣,使用8.3。 – itchy23