φ(..) ビボ~6 φ(..)

主にAccess、VBAに関する備忘録

JOIN を利用したDELETE

【例】 商品マスタと商品単価マスタがあり、商品単価が登録されていない商品を、商品マスタからすべて削除したい。


・商品マスタ
商品コード商品名
00001あんぱん
00002メロンパン
00003クリームパン


・商品単価マスタ

商品コード適用開始日単価
0000120080401120
0000220080401130

DELETE FROM 商品マスタ  /* この行を「Select * 」に変更すると削除対象レコードを確認できます */
FROM 商品マスタ
LEFT JOIN 商品単価マスタ
ON 商品マスタ.商品コード = 商品単価マスタ.商品コード
WHERE 商品単価マスタ.商品コード Is NULL


この場合、商品コード「00003」の「クリームパン」が削除されます。

ポイントは「Delete FROM 商品マスタ」の後に、削除したいレコードを抽出するためのSQL文を書くことです。
この記述法であれば、事前にSELECT文でデータを確認してから、キーとなるSQL構造を変更せずに削除を実行できます。
FROMを2回続けて書くことに少し違和感を感じるかもしれませんが、一度覚えてしまえば非常に便利な構文です。

JOIN を利用したDELETE - SQL Server 2005 活用のススメ 様