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 を含む、利用可能な製品に関する新しい詳細を含むテーブルです。

タスクは、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 ステートメントのパフォーマンスを最適化できます。