ホームページ >データベース >mysql チュートリアル >CTE または一時テーブルを使用して複数の Postgres テーブルにデータを順次挿入するにはどうすればよいですか?
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>
このクエリ内:
ins1
は、sample
テーブルに行を挿入し、挿入された行の ID を sample_id
として返します。 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 サイトの他の関連記事を参照してください。