首頁 > 資料庫 > mysql教程 > PostgreSQL 的 CTE 如何有效率地處理多表更新的多個具有 RETURNING 的 INSERT?

PostgreSQL 的 CTE 如何有效率地處理多表更新的多個具有 RETURNING 的 INSERT?

Mary-Kate Olsen
發布: 2025-01-02 14:05:40
原創
940 人瀏覽過

How Can PostgreSQL's CTEs Efficiently Handle Multiple INSERTs with RETURNING for Multi-Table Updates?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板