HOME >> Tips >> SQL Server Tips >> SQL

2つの表を比較して片方にない行を他方からDELETEする(DELETE ~ FROM)

 
文書番号:20358




「テーブルA」に存在しない行は「テーブルB」からも削除するSQLです。
2つの表「テーブルA」と「テーブルB」を比較し、「テーブルA」に存在するもののみ「テーブルB」に残す場合に。

【SQL】


DELETE TABLE_B
FROM   TABLE_B
LEFT OUTER JOIN TABLE_A
ON  TABLE_A.CODE = TABLE_B.CODE
WHERE TABLE_A.CODE IS NULL

【サンプル】

「CODE」項目で比較し、「商品マスタ」に存在しないものは「購入リスト」から削除します。
商品マスタ
CODE NAME
0001 りんご
0002 みかん
0003 ばなな
購入リスト
CODE NAME
0001 りんご
0002 みかん
0003 ばなな
0004 ぶどう
購入リスト
CODE NAME
0001 りんご
0002 みかん
0003 ばなな

DELETE 購入リスト
FROM   購入リスト
LEFT OUTER JOIN 商品マスタ
ON  商品マスタ.CODE = 購入リスト.CODE
WHERE 商品マスタ.CODE IS NULL

「テーブルA」に存在し、「テーブルB」に存在しないものを「テーブルA」からINSERTする場合には「MERGE」文を使用します。
・条件が一致する場合はUPDATE、一致しない場合はINSERTを実行する(MERGE)