2016-03-31 4 views
0

私は2つのテーブルAとBを持っていますが、Bの中にはAからの外部キーがあります。私がしたいのは、Aからすべての行を削除することですBにオカレンスがありますが、次のクエリを実行しますが、機能していません:でないテーブルから行を削除する

ご存知ですか?サブクエリのいずれかの値がNULLある場合はfalseまたはNULL

DELETE a FROM a 
WHERE NOT EXISTS (SELECT 1 FROM b WHERE b.foreign_key_of_A_in_B = a.id_A); 

NOT INリターン:

+1

ここからid_A に入っていない(選択... '。)何か行がありますか? – jarlh

+2

私はテーブル定義を表示します(fk定義を知りたいです)。 – jarlh

+1

Jarlhの質問に – sagi

答えて

3

私の最初の勧告は、not existsではなくnot inを試してみることです。これがオペレータの定義です。 NOT EXISTSの動作が予想されます。したがって、サブクエリ内にNULL値がある場合、これは機能します(つまり行を削除します)。NOT INバージョンは無効になります。

私はあなたがDELETEを行う前にSELECTを使用してロジックを試すことをお勧めします:

SELECT A.* 
FROM A 
WHERE NOT EXISTS (SELECT 1 FROM b WHERE b.foreign_key_of_A_in_B = A.id_A); 
+0

解決法と説明のためにGordonさんに感謝します。魅力のように動作します! –

0

ID NOT INは、次のようになり、テーブルから、削除するための標準的な:

DELETE from Table_A 
WHERE id -- ID of Table_A 
     not in (select ID FROM Table_B) 

このあなたの質問と同じように、表Bの表AにないIDが見つかるはずです

まず最初にSELECT文でこれを試してみてください

SELECT * from Table_A 
WHERE id -- ID of Table_A 
     not in (select ID FROM Table_B) 

いくつかの行を相互参照して再確認することを忘れないでください。

+0

これは私がやったことですが、この場合、ゴードンの説明が最良の方法であるために存在しません。 –