• ベストアンサー

別テーブルの検索した結果が0件のデータのレコードを削除したい

SQL Server 2005 を使用しています。 別テーブルで検索した結果が0件の時、対応するレコードを削除したいのですが、SQLをどうかけば実現出来るかわかりません。 具体的には、テーブル Aとテーブル B があって、テーブル Aのキーが AA,AB,ACとします。 この時、テーブル Bにも AA,AB,ACという列があるとします。 この時に、テーブルBをAA,AB,ACでGROUP BYしてCOUNTをとった時にレコード数が0のキーのレコードを、テーブルAから削除したいのですが、この時SQLを一つで書きたいのです。 テーブル Aが明細、テーブル Bが名簿みたいな形で、名簿に存在しないレコードを削除するような感じです。 どういうSQLを書けばいいか少し悩んでいます。 AA,AB,ACは全て integer型です。 どなたかわかりましたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • iyomante
  • ベストアンサー率60% (14/23)
回答No.1

あくまで一般論のSQLとしてですが、 テーブルAとテーブルBのキーが同一項目で 一方に存在しないレコードをもう一方で削除等するのなら DELETE FROM A WHERE NOT EXISTS ( select * from B where B.AA = A.AA and B.AB = A.AB and B.AC = A.AC );

takasebou
質問者

お礼

回答ありがとうございます。お礼が遅くなりましてすみません。 別の手段で実行してしまいましたが、今後の参考になります。

その他の回答 (2)

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.3

A. NO2 です。 失礼 Bテーブルを削除ではなく、Aテーブルを削除ですね。 訂正いたします。 下記 SQL が回答です。 ___________________________________________________________ DELETE A FROM A LEFT OUTER JOIN B ON A.AA = B.AA AND A.AB = B.AB AND A.AC = B.AC WHere B.AA IS NULL AND B.AB IS NULL AND B.AC IS NULL

takasebou
質問者

お礼

ありがとうございます。お礼が遅くなりましてすみません。 結局、別の方法で無理矢理実行してしまいましたが、今後の参考にします。

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.2

DELETE B FROM A LEFT OUTER JOIN B ON A.AA = B.AA AND A.AB = B.AB AND A.AC = B.AC WHere B.AA IS NULL AND B.AB IS NULL AND B.AC IS NULL ========================================================== 上記で大丈夫だと思います。 Exsits は毎回レコード探すので 処理スピードがいまいちです。 上記を試してみてください。 上記のSQLは AとBのテーブルをLEFT 結合したときAのテーブルのレコードだけが存在する場合 Bのテーブルの各値が NULL になります。 それを抽出して削除すればOKだと思います。 以上

関連するQ&A