ホームページ > データベース > mysql チュートリアル > PostgreSQL CTE はどのようにして複数のテーブルに複数の行を効率的に挿入できるのでしょうか?

PostgreSQL CTE はどのようにして複数のテーブルに複数の行を効率的に挿入できるのでしょうか?

Linda Hamilton
リリース: 2025-01-01 13:23:12
オリジナル
831 人が閲覧しました

How Can PostgreSQL CTEs Efficiently Insert Multiple Rows Across Multiple Tables?

PostgreSQL の CTE を使用した複数の行の挿入

テーブル 1、テーブル 2、テーブル 3 の 3 つのテーブルを持つリレーショナル データベースがあるとします。テーブル table1 には一般的なユーザー情報が含まれ、テーブル table2 と table3 にはパスワードやアドレスなどの追加データが含まれます。 table1 に新しいユーザーを追加するときに、ユーザー ID とその他の一意のデータを子テーブル table2 と table3 に同時に挿入する必要があります。

Postgres 9.3 の データ変更 CTE は、このシナリオの解決策。 CTE を使用すると、複数の 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
    -- Nothing to return here
)
INSERT INTO table3 (user_id, address, city, phone)
SELECT ins1.user_id, ..., ...
FROM ins1
RETURNING user_id;
ログイン後にコピー

CTE の内訳:

  • ins1 CTE: table1 に新しい行を挿入し、新しく作成された user_id を返します。
  • ins2 CTE: ins1 の user_id を使用して、table2 にデータを挿入します。値を返す必要がないので省略します。
  • Final INSERT: ins1 と追加の列の user_id を使用して、table3 にデータを挿入します。必要に応じて、目的の列と値を指定できます。オプションの RETURNING 句を使用すると、新しく作成された user_id を table3 から取得できます。

ベスト プラクティス:

  • 常に列定義リストをテーブルに含めます。テーブル構造との一貫性を確保するための INSERT ステートメント。
  • 列がデフォルト値を受け取る必要がある場合は、 INSERT ステートメントでは単純に省略します。 Postgres は自動的にデフォルトを挿入します。
  • 最後の CTE はオプションで値を返すことができ、これはさらなる処理や新しく作成された ID の取得に役立つ可能性があります。

以上がPostgreSQL CTE はどのようにして複数のテーブルに複数の行を効率的に挿入できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート