簡體   English   中英

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

[英]INSERT INTO ... RETURNING multiple columns (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。

試試這個。

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

@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)

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

我發現了這種方法(在一個函數中!)


DO $$

DECLARE 
    
    returner_ID int;
    returner_Name text;
    returner_Age int;

BEGIN

    INSERT INTO schema.table
        ("ID", "Name", "Age")
    VALUES 
        ('1', 'Steven Grant', '30')
    RETURNING 
        "ID", 
        "Name",
        "Age"
    INTO 
        returner_ID, 
        returner_Name,
        returner_Ag

END; $$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM