• ベストアンサー

SQL server:SELECT文について

SQL serverにてデータの管理をしてます。SELECT文について質問なのですが、 例えば、取引先データが入っているテーブルを「A_取引先」とします。 また、ここ何年かの売上データが入っているテーブルを「B_売上」とします。 今回、取引先整理のため売上データ(B_売上)にない取引先を取引先データ(A_取引先)から抽出したいのですが、どのように書けばよいでしょうか not inを使っても「B_売上」にまったくない取引先は抽出されません。 分かりにくい文章かもしれませんが、ご教授の程よろしくお願い致します。

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

>not inを使っても「B_売上」にまったくない取引先は抽出されません。 どういうSQLを書いているのかが分かりませんので何とも言えませんが、 not in でも抽出できると思いますよ。 もしくは not exists を使って select 取引先 from A_取引先 where not exists ( select * from B_売上 where A_取引先.取引先ID = B_売上.取引先ID); こんな感じもいいと思います。

regulus0725
質問者

お礼

構文のなく分かりづらい質問の中、回答して頂きありがとうございました。 existsで解決出来ました。 exists中のwhere以降が間違っていたみたいです。

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

SELECT A_取引先.* FROM A_取引先 WHERE NOT EXISTS ( SELECT 1 FROM B_売上 WHERE A_取引先.取引先CD=B_売上.取引先CD) なんてのもあります。 B_売上.取引先CDにINDEXがあればかなり高速です。

regulus0725
質問者

お礼

分かりづらい質問の中、回答を頂きありがとうございました。 existsで無事解決出来ました。

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.1

A_取引先 と B_売上のリレーションキーを「取引先名」と仮定して select 取引先名 from A_取引先 left outer join (select 取引先名, count(*) as 取引回数 from B_売上 group by 取引先名) 取引履歴 on A_取引先.取引先名 = 取引履歴.取引先名 where 取引履歴.取引回数 = 0; といった感じじゃないでしょうか。

regulus0725
質問者

お礼

分かりづらい文章の中、回答して頂きありがとうございました。 無事解決出来ました。

関連するQ&A