ホームページ >データベース >mysql チュートリアル >CTE または一時テーブルを使用して複数の Postgres テーブルにデータを順次挿入するにはどうすればよいですか?

CTE または一時テーブルを使用して複数の Postgres テーブルにデータを順次挿入するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-12 14:35:47719ブラウズ

How Can I Sequentially Insert Data into Multiple Postgres Tables Using CTEs or a Temporary Table?

Postgres CTE を使用して複数のテーブルにデータを順次挿入する

Postgres では、データ変更共通テーブル式 (CTE) を使用して、単一のクエリで複数のテーブルにデータを挿入できます。 CTE は、一時的な結果セットを定義し、単一のクエリでデータを操作する便利な方法を提供します。

データを使用して CTE を変更する

次のクエリは、CTE を使用して 3 つのテーブルにデータを順番に挿入する方法を示しています。

<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 テーブルに行を挿入し、挿入された行の ID を sample_id として返します。
  • 2 番目の CTE、ins2 は、ins1 によって返された sample_id を使用して、sample1 テーブルに行を挿入します。挿入された行の user_id を返します。
  • 最後の INSERT ステートメントは、ins2 によって返された user_id を使用して sample2 テーブルに行を挿入します。

このアプローチにより、複数の INSERT ステートメントを連鎖させ、以前の挿入から返された値を再利用できます。

同時書き込みの処理

複数のセッションが同時にデータを挿入している場合は、同時書き込みの可能性を考慮する必要があります。これを行うには、ON CONFLICT 句を使用して、重複レコードを挿入するときの動作を指定します。

一時テーブルを使用する代替手段

CTE を使用する代わりに、中間データを保持する一時テーブルを作成し、挿入を順番に実行することもできます。

<code class="language-sql">CREATE TEMP TABLE tmp AS SELECT * FROM sample;
INSERT INTO sample1 (sample_id, adddetails) SELECT id, 'ss' FROM tmp;
INSERT INTO sample2 (user_id, value) SELECT user_id, 'ss2' FROM tmp;
DROP TABLE tmp;</code>

このアプローチでは、CTE を直接リンクせずに、後続の挿入のデータ ソースとして一時テーブルを使用します。

データ変更 CTE または一時テーブルを使用すると、単一の Postgres クエリで複数のテーブルにデータを効率的に挿入できるため、データ挿入操作が簡素化されます。

以上がCTE または一時テーブルを使用して複数の Postgres テーブルにデータを順次挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。