首頁>Program>source

我正在使用Postgres 9.3作為後端構建資料庫,该資料庫具有3个表:

table1 (user_id, username, name, surname, emp_date)
table2 (pass_id, user_id, password)
table3 (user_dt_id, user_id, adress, city, phone)

可以看到 table2table3table1的子表 .
我可以提取 user_idtable1中新插入的行 (父母):

INSERT INTO "table1" (default,'johnee','john','smith',default) RETURNING userid;

我需要插入新提取的ID(来自 table1 )进入 user_id table2的列 和 table3 以及這些表格特有的其他資料.基本上是3 X INSERT ...
我该怎麼办?

最新回復
  • 5月前
    1 #

    使用 data-modifying CTEs 鏈接您的三个INSERT.像這樣:

    WITH ins1 AS (
       INSERT INTO table1 (username, name,  surname)
       VALUES ('johnee','john','smith')
       RETURNING user_id
       )
    , ins2 AS (
       INSERT INTO table2 (user_id, password)
       SELECT ins1.user_id, 'secret'
       FROM   ins1                            -- nothing to return here
       )
    INSERT INTO table3 (user_id, adress, city, phone)
    SELECT ins1.user_id, ...
    FROM   ins1
    RETURNING user_id;
    

      It's recommended to always add a column definition list 用於INSERT(臨時代碼除外).否則,如果表結構發生變化,您的代碼可能会以令人惊讶的方式中斷。

      我从列定義列表中省略了您只需要輸入 DEFAULT的列 .預設值是自動應用的.较短,結果相同。

      最终的女巫 如果需要結果 RETURNING是可選的 返迴(顯然来自序列或其他一些預設值。它實際上返迴 user_id 来自 user_id ,但這是相同的,除非您有一些觸發器或其他魔術干扰。

      有關修改資料(又稱"可寫")CTE的更多详细資訊:

      table3

        Are SELECT type queries the only type that can be nested?

  • apache:CSS,JS和圖像無法以漂亮的網址顯示
  • php:致命錯誤:呼叫未定義的函式oci_connect()