プロが教える店舗&オフィスのセキュリティ対策術

SQL serverにてデータの管理をしてます。SELECT文について質問なのですが、
例えば、取引先データが入っているテーブルを「A_取引先」とします。
また、ここ何年かの売上データが入っているテーブルを「B_売上」とします。

今回、取引先整理のため売上データ(B_売上)にない取引先を取引先データ(A_取引先)から抽出したいのですが、どのように書けばよいでしょうか

not inを使っても「B_売上」にまったくない取引先は抽出されません。

分かりにくい文章かもしれませんが、ご教授の程よろしくお願い致します。

A 回答 (3件)

>not inを使っても「B_売上」にまったくない取引先は抽出されません。


どういうSQLを書いているのかが分かりませんので何とも言えませんが、
not in でも抽出できると思いますよ。

もしくは not exists を使って

select 取引先
from A_取引先
where not exists (
select *
from B_売上
where A_取引先.取引先ID = B_売上.取引先ID);

こんな感じもいいと思います。
    • good
    • 0
この回答へのお礼

構文のなく分かりづらい質問の中、回答して頂きありがとうございました。

existsで解決出来ました。
exists中のwhere以降が間違っていたみたいです。

お礼日時:2011/10/20 18:17

SELECT A_取引先.*


FROM A_取引先
WHERE NOT EXISTS
( SELECT 1
FROM B_売上
WHERE A_取引先.取引先CD=B_売上.取引先CD)

なんてのもあります。
B_売上.取引先CDにINDEXがあればかなり高速です。
    • good
    • 0
この回答へのお礼

分かりづらい質問の中、回答を頂きありがとうございました。

existsで無事解決出来ました。

お礼日時:2011/10/20 18:18

A_取引先 と B_売上のリレーションキーを「取引先名」と仮定して



select 取引先名 from A_取引先
left outer join (select 取引先名, count(*) as 取引回数 from B_売上 group by 取引先名) 取引履歴
on A_取引先.取引先名 = 取引履歴.取引先名
where 取引履歴.取引回数 = 0;

といった感じじゃないでしょうか。
    • good
    • 0
この回答へのお礼

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

無事解決出来ました。

お礼日時:2011/10/20 18:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す