【SQL】DELETEである表に存在しないデータを削除する方法
ここではORACLEデータベースのSQLのDELETE文で、別のある表の存在しないデータだけをチェックして削除することが出来ます。
DELETE文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】DELETE文の書き方:サンプル多数あり
DELETE文の基本構文
DELETE文の基本構文は次の通りです。
WHERE条件を指定することで、別のある表に存在しないデータだけを削除することが出来ます。
DELETE FROM テーブル名 [WHERE 条件];
ある表に存在しないデータだけ削除する方法
ある表に存在しないレコードのみ削除する方法をいくつか紹介していきます。
NOT EXISTSを使う方法
ある表にデータが存在するか、存在チェックをNOT EXISTSを使い行う方法です。
次のSQLでは、TAB1テーブルの列を削除するとき、TAB2に一致するレコードが存在しないデータだけを削除しています。
DELETE FROM tab1 a
WHERE
NOT EXISTS (SELECT
'x'
FROM
tab2 b
WHERE
b.col1 = a.col1);
複数の条件を指定するときは、WHERE句にカラムを追加します。
DELETE FROM tab1 a
WHERE
NOT EXISTS (SELECT
'x'
FROM
tab2 b
WHERE
b.col1 = a.col1
and b.col2 = a.col2);
IN句を使う方法
ある表のデータと一致しないデータでけ選択するときに、NOT INを使います。
次のSQLでは、TAB1テーブルの列を削除するとき、TAB2に一致するレコードが存在しないデータだけを削除しています。
先ほどのNOT EXISTSと結果は同じになります。
DELETE FROM tab1 a
WHERE
a.col1 NOT IN (SELECT
b.col1
FROM
tab2 b);
複数の条件を指定するときは、次のように書きます。
DELETE FROM tab1 a
WHERE
(a.col1,a.col2) NOT IN (SELECT
b.col1
,b.col2
FROM
tab2 b);
まとめ
DELETE文で、別のある表に存在しないデータだけを削除する場合は、NOT EXISTSやNOT INを使います。
当サイトでは他にも、DELETE文の様々な書き方を解説しております。
詳しくは「【SQL】DELETE文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。