首頁 >資料庫 >mysql教程 >如何使用單一查詢同時將資料插入三個 Postgres 表中?

如何使用單一查詢同時將資料插入三個 Postgres 表中?

DDD
DDD原創
2025-01-12 14:38:42417瀏覽

How Can I Insert Data into Three Postgres Tables Simultaneously Using a Single Query?

使用 Postgres 同時向三個表插入資料

假設您需要使用單一查詢同時將資料插入三個表。表結構如下:

<code class="language-sql">CREATE TABLE sample (
  id        bigserial PRIMARY KEY,
  lastname  varchar(20),
  firstname varchar(20)
);

CREATE TABLE sample1(
  user_id    bigserial PRIMARY KEY,
  sample_id  bigint REFERENCES sample,
  adddetails varchar(20)
);

CREATE TABLE sample2(
  id      bigserial PRIMARY KEY,
  user_id bigint REFERENCES sample1,
  value   varchar(10)
);</code>

您需要為每次插入確保主鍵,然後在後續表中使用它。但是,為每次插入執行單一查詢不允許立即重複使用鍵值。

解決方法:資料修改 CTE

為了同時向三個表插入數據,您可以使用數據修改 CTE(公共表表達式)。它們在連續插入之間建立依賴關係:

<code class="language-sql">WITH ins1 AS (
  INSERT INTO sample(firstname, lastname)
  VALUES ('fai55', 'shaggk')
  RETURNING id AS sample_id
), ins2 AS (
  INSERT INTO sample1 (sample_id, adddetails)
  SELECT sample_id, 'ss' FROM ins1
  RETURNING user_id
)
INSERT INTO sample2 (user_id, value)
SELECT user_id, 'ss2' FROM ins2;</code>

第一個 CTE,ins1,插入 sample 表並傳回產生的鍵 (sample_id)。然後,ins2 使用來自 ins1 的 sample_id 插入 sample1 並傳回 user_id。最後,第三個 INSERT 使用 user_id 插入 sample2。

預先提供資料

通常,預先在 CTE 中定義資料行效率較高:

<code class="language-sql">WITH data(firstname, lastname, adddetails, value) AS (
  VALUES
    ('fai55', 'shaggk', 'ss', 'ss2'),
    ('fai56', 'XXaggk', 'xx', 'xx2')
)
...
-- (查询的其余部分保持不变)</code>

請記住,要考慮唯一性限制、類型轉換和處理並發寫入等因素,以確保資料的完整性。

以上是如何使用單一查詢同時將資料插入三個 Postgres 表中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn