JOIN を利用したDELETE
【例】 商品マスタと商品単価マスタがあり、商品単価が登録されていない商品を、商品マスタからすべて削除したい。
・商品マスタ
商品コード 商品名 00001 あんぱん 00002 メロンパン 00003 クリームパン
・商品単価マスタ
商品コード 適用開始日 単価 00001 20080401 120 00002 20080401 130
DELETE FROM 商品マスタ /* この行を「Select * 」に変更すると削除対象レコードを確認できます */ FROM 商品マスタ LEFT JOIN 商品単価マスタ ON 商品マスタ.商品コード = 商品単価マスタ.商品コード WHERE 商品単価マスタ.商品コード Is NULL
この場合、商品コード「00003」の「クリームパン」が削除されます。ポイントは「Delete FROM 商品マスタ」の後に、削除したいレコードを抽出するためのSQL文を書くことです。
JOIN を利用したDELETE - SQL Server 2005 活用のススメ 様
この記述法であれば、事前にSELECT文でデータを確認してから、キーとなるSQL構造を変更せずに削除を実行できます。
FROMを2回続けて書くことに少し違和感を感じるかもしれませんが、一度覚えてしまえば非常に便利な構文です。