###質問の要約
MERGE INTOの条件文NOT MATCHED THENとNOT MATCHED BY TARGET THENの違いがわからない。
###発生している問題
GROUP | ID | NAME | AGE |
---|---|---|---|
1 | 1 | 一郎 | 20 |
1 | 2 | 二郎 | 32 |
2 | 3 | 三郎 | 22 |
2 | 4 | 四郎 | 27 |
3 | 5 | 五郎 | 24 |
3 | 6 | 六郎 | 52 |
上記のようなデータの入ったTBL1があったとして、任意のグループのデータを全く同じスキーマのTBL2にコピーするとします。IDは一意で、この時に既に同一IDのレコードがTBL2に存在していれば更新、存在していなければ挿入を行います(以下そのクエリ)
sql
1MERGE INTO TBL2 T2 2USING ( 3 SELECT 4 * 5 FROM 6 TBL1 7 WHERE 8 GROUP_ID = 1 9) T1 10ON ( 11 T1.ID = T2.ID 12) 13WHEN MATCHED THEN 14 UPDATE 15 SET 16 GROUP_ID = T1.GROUP_ID, 17 NAME = T1.NAME, 18 AGE = T1.AGE 19WHEN NOT MATCHED BY TARGET THEN 20 INSERT ( 21 GROUP_ID, ID, NAME, AGE 22 ) 23 VALUES ( 24 GROUP_ID, ID, NAME, AGE 25 );
GROUP_ID=1に対してこの操作を行った後に、GROUP_IDが1の花子さん(12)がTBL1に登録されたとします。
GROUP | ID | NAME | AGE |
---|---|---|---|
1 | 7 | 花子 | 12 |
この状態で再びGROUP_ID=1に対してMERGE INTOを行うと、太郎と次郎はMATHCED THENの中で更新が行われ、花子はNOT MATCHED THENの中で挿入が行われると思います。
試しに先程のプログラムのNOT MATCHED THEN
の部分をNOT MATCHED BY TARGET THEN
に変えてもどちらも同じ結果になったのですが、この2つの違いは何なのでしょうか。
###試したこと
自分が参考にしたサイトでは以下のように説明していました。
各構文の解説 | |
---|---|
WHEN NOT MATCHED THEN | 比較条件と一致していないレコードへの操作内容 |
WHEN NOT MATCHED BY TARGET THEN | 操作対象に存在しないレコードへの操作内容 |
http://beatdjam.hatenablog.com/entry/2015/03/06/010808
比較条件と一致していないレコード=操作対象に存在しないレコードだと思うのですが、この違いはなんでしょうか。
わかり易い例、説明などをしていただけたら助かります。わかりやすい説明をしているサイトのリンクなどでもうれしいです。
よろしくお願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
SQL Server 2008

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/17 01:52