SQL Server MERGE (日本語)

概要:このチュートリアルでは、SQL Server MERGEの使用方法を学習します。別のテーブルから一致した値に基づいてテーブル内のデータを更新するステートメント。

はじめにSQLServerMERGEステートメント

ソーステーブルとターゲットテーブルという2つのテーブルがあり、次のことを行う必要があるとします。ソーステーブルから一致した値に基づいてターゲットテーブルを更新します。次の3つのケースがあります。

  1. ソーステーブルに、ターゲットテーブルに存在しない行がいくつかあります。この場合、ソーステーブルにある行をターゲットテーブルに挿入する必要があります。
  2. ターゲットテーブルには、ソーステーブルに存在しない行がいくつかあります。この場合、ターゲットテーブルから行を削除する必要があります。
  3. ソーステーブルには、ターゲットテーブルの行と同じキーを持つ行がいくつかあります。ただし、これらの行の非キー列の値は異なります。この場合、ソーステーブルからの値でターゲットテーブルの行を更新する必要があります。

次の図は、対応するアクションでソーステーブルとターゲットテーブルを示しています。更新および削除:

INSERTUPDATE、およびDELETEステートメントを個別に使用するには、3つの個別のステートメントを作成する必要がありますソーステーブルの一致する行を使用してデータをターゲットテーブルに更新するステートメント。

ただし、SQLServerにはMERGEステートメントが用意されています。同時にアクション。次に、MERGEステートメントの構文を示します。

Code language: SQL (Structured Query Language) (sql)

最初に、ターゲットテーブルとソースを指定しますMERGE句のテーブル。

次に、merge_conditionは、ソーステーブルの行がどのように一致するかを決定します。ターゲットテーブルの行。これは、join句の結合条件に似ています。通常、照合には主キーまたは一意キーのいずれかのキー列を使用します。

第3に、merge_conditionは次の3つの状態になります。MATCHEDNOT MATCHED、およびNOT MATCHED BY SOURCE

  • MATCHED:これらはマージ条件に一致する行です。図では、それらは青で示されています。一致する行については、ターゲットテーブルの行列をソーステーブルの値で更新する必要があります。
  • NOT MATCHED:これらはソースの行ですターゲットテーブルに一致する行がないテーブル。図では、オレンジ色で示されています。この場合、ソーステーブルからターゲットテーブルに行を追加する必要があります。 NOT MATCHEDNOT MATCHED BY TARGETとも呼ばれることに注意してください。
  • NOT MATCHED BY SOURCE :これらは、ソーステーブルのどの行とも一致しないターゲットテーブルの行です。これらは、図では緑色で示されています。ターゲットテーブルをソーステーブルのデータと同期する場合は、この一致条件を使用して、ターゲットテーブルから行を削除する必要があります。

SQL ServerMERGEステートメントの例

製品カテゴリごとの売上を格納する2つのテーブルsales.categorysales.category_stagingがあるとします。

sales.category_staging(ソーステーブル)の値を使用してデータをsales.category(ターゲットテーブル)に更新するには、次の

ステートメント:

この例では、両方のテーブルのcategory_id列の値をマージ条件として使用しました。

  • まず、行sales.category_stagingテーブルのid1、3、4はターゲットテーブルの行と一致するため、MERGEステートメントは値を更新しますカテゴリ名と金額の列sales.categoryテーブル内。
  • 次に、sales.category_stagingテーブルのID5および6の行が存在しません。 sales.categoryテーブルにあるため、MERGEステートメントはこれらの行をターゲットテーブルに挿入します。
  • 3番目の行sales.categoryテーブルのID2は、sales.sales_stagingテーブルに存在しないため、MERGEステートメントはこの行を削除します。

マージの結果、sales.categoryテーブルのデータは完全に同期されます。 sales.category_stagingテーブル。

このチュートリアルでは、SQL Server MERGEステートメントを使用して変更を加える方法を学習しました。別のテーブルの一致する値に基づくテーブル内。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です