ホームページ >データベース >mysql チュートリアル >PostgreSQL の CTE は、複数テーブルの更新で RETURNING を使用して複数の INSERT を効率的に処理するにはどうすればよいでしょうか?
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 は table1 への INSERT を実行し、user_id を返します。次に、ins2 CTE は、ins1 の user_id を使用して、table2 にデータを挿入します。最後に、3 番目の INSERT は、ins1 の user_id を使用して table3 にデータを挿入し、オプションで結果の user_id を返します。
データ変更 CTE を使用することで、複数の INSERT を効率的にチェーンし、新しく挿入されたデータが子に確実に挿入されるようにすることができます。テーブルは親テーブルとの必要な関係を維持します。
以上がPostgreSQL の CTE は、複数テーブルの更新で RETURNING を使用して複数の INSERT を効率的に処理するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。