PostgreSQL 中多表更新的多重INSERT...RETURNING
將資料插入到多個子表中,同時引用來自子表的新插入資料父表可能是一項具有挑戰性的任務。在這種情況下,PostgreSQL 使用資料修改公共表格表達式 (CTE) 提供了強大的解決方案。
最初,我們可以使用RETURNING 子句檢索父表中新插入的行的user_id:
INSERT INTO table1 (default,'johnee','john','smith',default) RETURNING userid;
為了執行多個INSERT,我們可以利用資料修改CTE 作為如下:
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 ) INSERT INTO table3 (user_id, adress, city, phone) SELECT ins1.user_id, ... FROM ins1 RETURNING user_id;
在此程式碼中,ins1 CTE 執行INSERT 到table1 並傳回user_id。然後,ins2 CTE 使用 ins1 中的 user_id 將資料插入 table2 中。最後,第三個 INSERT 使用 ins1 中的 user_id 將資料插入 table3 中,並可選擇傳回結果 user_id。
透過使用資料來修改 CTE,我們可以有效地連結多個 INSERT,並確保新插入的資料在 child 中表與父表保持必要的關係。
以上是PostgreSQL 的 CTE 如何有效率地處理多表更新的多個具有 RETURNING 的 INSERT?的詳細內容。更多資訊請關注PHP中文網其他相關文章!