初歩的な質問で大変恐縮ですが、ご教授願います。
以下の二つのテーブルがある場合、1回のSQLで削除する方法を教えてください。
<Aテーブル>
---------------
ID 削除フラグ
A 0
B 1
C 0
D 1
E 0
E 0
E 0
F 1
F 0
F 1
G 1
G 1
G 1
<Bテーブル>
ID
-----
A
B
E
F
G
<削除後のAテーブル>
---------------
ID 削除フラグ
A 0
C 0
D 1
E 0
E 0
E 0
F 1
F 0
F 1
※Aは削除フラグが0のため削除されない。
※C,DはIDが一致しないため削除されない。
※E,Fは削除フラグが全て1でないため削除されない。
IDが一致していて、削除フラグが全て「1」である場合、Aテーブルを削除する。
としたいのですが、半日悩んでもうまくいきません。
どうかお願い致します。
select a.id
from a natural join b
where flag = 1
and a.id not in (select id from a where flag <> 1);
で,削除対象のIDであるBとGが抽出されるので,これを,
delete from a
where a.id in (……);
に組み込めば良いのではないでしょうか。
私の手元にあるDBソフトは同一テーブルを2重にネストしてdelete対象にできないので,別途viewを作る必要がありそうなのですが。
お礼
返答が遅れて申し訳ありません。 現在手元に実機がありませんので、明日試させて頂きます。 大変勉強になりました。ありがとうございます。