- ベストアンサー
SQL server:SELECT文について
SQL serverにてデータの管理をしてます。SELECT文について質問なのですが、 例えば、取引先データが入っているテーブルを「A_取引先」とします。 また、ここ何年かの売上データが入っているテーブルを「B_売上」とします。 今回、取引先整理のため売上データ(B_売上)にない取引先を取引先データ(A_取引先)から抽出したいのですが、どのように書けばよいでしょうか not inを使っても「B_売上」にまったくない取引先は抽出されません。 分かりにくい文章かもしれませんが、ご教授の程よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>not inを使っても「B_売上」にまったくない取引先は抽出されません。 どういうSQLを書いているのかが分かりませんので何とも言えませんが、 not in でも抽出できると思いますよ。 もしくは not exists を使って select 取引先 from A_取引先 where not exists ( select * from B_売上 where A_取引先.取引先ID = B_売上.取引先ID); こんな感じもいいと思います。
その他の回答 (2)
- nora1962
- ベストアンサー率60% (431/717)
SELECT A_取引先.* FROM A_取引先 WHERE NOT EXISTS ( SELECT 1 FROM B_売上 WHERE A_取引先.取引先CD=B_売上.取引先CD) なんてのもあります。 B_売上.取引先CDにINDEXがあればかなり高速です。
お礼
分かりづらい質問の中、回答を頂きありがとうございました。 existsで無事解決出来ました。
- t_ohta
- ベストアンサー率38% (5238/13705)
A_取引先 と B_売上のリレーションキーを「取引先名」と仮定して select 取引先名 from A_取引先 left outer join (select 取引先名, count(*) as 取引回数 from B_売上 group by 取引先名) 取引履歴 on A_取引先.取引先名 = 取引履歴.取引先名 where 取引履歴.取引回数 = 0; といった感じじゃないでしょうか。
お礼
分かりづらい文章の中、回答して頂きありがとうございました。 無事解決出来ました。
お礼
構文のなく分かりづらい質問の中、回答して頂きありがとうございました。 existsで解決出来ました。 exists中のwhere以降が間違っていたみたいです。