解決済みの質問
初歩的な質問で大変恐縮ですが、ご教授願います。
以下の二つのテーブルがある場合、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テーブルを削除する。
としたいのですが、半日悩んでもうまくいきません。
どうかお願い致します。
投稿日時 - 2012-02-19 22:55:50
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を作る必要がありそうなのですが。
投稿日時 - 2012-02-20 11:10:54
お礼
返答が遅れて申し訳ありません。
現在手元に実機がありませんので、明日試させて頂きます。
大変勉強になりました。ありがとうございます。
投稿日時 - 2012-02-20 23:18:21
0人が「このQ&Aが役に立った」と投票しています
OKWaveのオススメ
おすすめリンク