logo

SQL MERGE ステートメント

SQL MERGE ステートメント 組み合わせる 入れる 消去 、 そして UPDATE ステートメント 単一のクエリにまとめられます。

CSSテキストの整列

SQL の MERGE ステートメント

SQL の MERGE ステートメントは、 ターゲットテーブル との JOIN の結果に基づいて ソーステーブル 。これにより、ユーザーは 2 番目のテーブルの結果に基づいて 1 つのテーブルに対して操作を実行することで、2 つのテーブルを同期できます。

MERGE ステートメントは、指定されたキー フィールドに基づいてソース テーブルとターゲット テーブルの間でデータを比較します。新しいレコードの挿入、既存のレコードの更新、ソースに存在しなくなったレコードの削除やフラグ設定などの適切なアクションを実行します。



このステートメントは、データ変更を管理する柔軟な方法を提供し、メンテナンスなどのシナリオで一般的に使用されます。 ゆっくりと変化する次元 ( SCD ) で target_table にマージします
ソーステーブルの使用
ON マージ条件
一致したとき
UPDATE SET 列 1 = 値 1 [, 列 2 = 値 2 …]
一致しない場合
INSERT (列1 [, 列2 …])
VALUES (値1 [, 値2 …]);

SQL MERGE ステートメントの例

2 つのテーブルがあるとします。

  • 製品リスト これは、各製品の ID、名前、および価格に対応するフィールド P_ID、P_NAME、および P_PRICE を含む、入手可能な製品に関する現在の詳細を含むテーブルです。
  • UPDATED_LIST これは、各製品の ID、名前、および価格に対応するフィールド P_ID、P_NAME、および P_PRICE を含む、利用可能な製品に関する新しい詳細を含むテーブルです。

2つのテーブル


タスクは、PRODUCT_LIST 内の製品の詳細を UPDATED_LIST に従って更新することです。

解決

データ構造を試す

この例をわかりやすく説明するために、例をいくつかのステップに分割してみましょう。

ステップ 1: TARGET テーブルと SOURCE テーブルを認識する

したがって、この例では、UPDATED_LIST に従って PRODUCT_LIST 内の製品を更新するように求められるため、PRODUCT_LIST は TARGET として機能し、UPDATED_LIST は SOURCE テーブルとして機能します。

ターゲットテーブルとソーステーブル

ステップ 2: 実行する操作を認識します。

ここで、TARGET テーブルと SOURCE テーブルの間に次の 3 つの不一致があることがわかります。

1. TARGET の COFFEE のコストは 15.00 ですが、SOURCE では 25.00 です。

 PRODUCT_LIST 102 COFFEE 15.00   UPDATED_LIST 102 COFFEE 25.00>

2. SOURCE には BISCUIT 製品はありませんが、TARGET にはあります

 PRODUCT_LIST 103 BISCUIT 20.00>

3. TARGET には CHIPS 製品がありませんが、SOURCE にはあります

 UPDATED_LIST 104 CHIPS 22.00>

したがって、上記の不一致に従って、TARGET で 3 つの操作を実行する必要があります。彼らです:

1. UPDATE操作

102 COFFEE 25.00>

2. 削除操作

ウェブブラウザの設定
103 BISCUIT 20.00>

3. INSERT操作

104 CHIPS 22.00>

ステップ 3: SQL クエリを作成する

SQLクエリ の助けを借りて上記の操作を実行します。 MERGE ステートメント は:

SQL
/* Selecting the Target and the Source */ MERGE PRODUCT_LIST AS TARGET  USING UPDATE_LIST AS SOURCE   /* 1. Performing the UPDATE operation */  /* If the P_ID is same,   check for change in P_NAME or P_PRICE */  ON (TARGET.P_ID = SOURCE.P_ID)  WHEN MATCHED   AND TARGET.P_NAME  SOURCE.P_NAME   OR TARGET.P_PRICE  SOURCE.P_PRICE  /* Update the records in TARGET */  THEN UPDATE   SET TARGET.P_NAME = SOURCE.P_NAME,  TARGET.P_PRICE = SOURCE.P_PRICE    /* 2. Performing the INSERT operation */  /* When no records are matched with TARGET table   Then insert the records in the target table */  WHEN NOT MATCHED BY TARGET   THEN INSERT (P_ID, P_NAME, P_PRICE)   VALUES (SOURCE.P_ID, SOURCE.P_NAME, SOURCE.P_PRICE)  /* 3. Performing the DELETE operation */  /* When no records are matched with SOURCE table   Then delete the records from the target table */  WHEN NOT MATCHED BY SOURCE   THEN DELETE /* END OF MERGE */>

出力:

 PRODUCT_LIST P_ID P_NAME P_PRICE 101 TEA 10.00  102 COFFEE 25.00 104 CHIPS 22.00>

したがって、このようにして、MERGE ステートメントの助けを借りて、これら 3 つの主要なステートメントをすべて SQL で実行できます。

注記: MERGE 構文では、ターゲットとソース以外の任意の名前を使用できます。これらは、より良い説明を提供するためにのみ使用されます。

SQL MERGE ステートメントに関する重要なポイント

  • SQL MERGE ステートメントは結合します。 入れる アップデート 、 そして 消去 操作を 1 つのステートメントにまとめることで、ソース テーブルとターゲット テーブルの間で効率的なデータ同期が可能になります。
  • 単一のトランザクションで複数のデータ操作操作を処理することで、複雑な SQL スクリプトを柔軟にカスタマイズできます。
  • SQL MERGE ステートメントは、データ ウェアハウスでの緩やかに変化するディメンション (SCD) の保守などのシナリオでよく使用されます。
  • 適切なインデックス付け、最適化された結合条件、および必要なレコードのソース テーブルのフィルタリングにより、MERGE ステートメントのパフォーマンスを最適化できます。