dポイントプレゼントキャンペーン実施中!

SQLで、下記selectを行いたいです。

テーブルA
テーブルB
テーブルC

これら三つのテーブルには、同一のコードが振られています。
この三つのテーブルのひとつにでも、抜けているコードを抜き出したいです。
(テーブルAのコード=テーブルBのコード=テーブルCのコードになっていないコード)

例)
テーブルAに入ってるコード(1.3.5)
テーブルBに入っているコード(1.4.5)
テーブルCに入っているコード(1.5.6)

このとき、三つのテーブルにきちんと入っているコードは、1と5だけなので、それ以外のコードを抜き出す→3.4.6

これをSQLで行う場合、簡単なSQL文はありますでしょうか?

今、考えているのは、各テーブルすべてをinner joinしたviewを作成し(これにより三つとも入ってるコードの一覧ができる)、
そのviewと、テーブルA、テーブルB、テーブルCそれぞれをひとつづつleft joinして、不一致データを取り出す方法です。
でも、そうすると、viewを作成しなくてはいけず、また、SQLをテーブルの数分(今回は3回)投げなくてはいけなくて。。
もっと、単純にかけないものでしょうか?

ご存知の方、教えてください。

A 回答 (1件)

RDBMSは、SQL Serverなのですね?


2000ですか?2005ですか?
バージョンにより、せっかく具体的なSQLを提示しても、質問者さんの環境では動かせない場合があります。

以下のSQLを試してみてください。2005なら動くと思います。
2000なら、インラインビュー(「select ~ from (select ~ from ~)」という記述)が、使えないかも知れません。

select *
from(select c1 from A
union
select c1 from B
union
select c1 from C) as x
where not exists
(select * from A,B,C
where A.c1=B.c1 and B.c1=C.c1
and x.c1=A.c1)
    • good
    • 0
この回答へのお礼

ありがとうございます。
早速試してみました。

きちんと値が返ってきました!
あとは、負荷状況とかを確認して、つかえそうでしたら、使わせていただきます。

早速ご回答いただき、本当にありがとうございました。

P.S ちなみに、2005です。

お礼日時:2007/08/22 19:57

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

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