こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

テーブル結合について、下記SQLをANSI結合の書き方で表したい。

テーブル結合について、下記SQLをANSI結合の書き方で表したい。

select *
from
(select key from A
union
select key from B
union
select key from C) X,
A,B,C
where X.key=A.key(+) and X.key=B.key(+) and X.key=C.key(+)

このSQLをANSI結合の記述で書きたいのですが、
(+)での結合文になれておらず試行錯誤しております。
下記のようなのかなとは模索しておりますが、
手元に実行環境がなくわかりません。
また、要所気付く点などありましたら、ご指摘願います。

select A.*, B.*, C.*
from
(select key from A
union
select key from B
union
select key from C) X,
LEFT JOIN A
ON X.key=A.key
LEFT JOIN B
ON X.key=B.key
LEFT JOIN C
ON X.key=C.key

投稿日時 - 2010-04-14 02:57:10

QNo.5824714

すぐに回答ほしいです

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

敢えていうなら、Xの後のカンマが不要です。

select *
from
(select key from A
union
select key from B
union
select key from C) X
LEFT JOIN A ON X.key=A.key
LEFT JOIN B ON X.key=B.key
LEFT JOIN C ON X.key=C.key

Aテーブルのkey、Bテーブルのkey、Cテーブルのkeyが重複する可能性があり、
keyが重複する場合は、単純横展開ではなく、1行にしたいという条件であれば、
(+)を単純にLEFT OUTER JOINにするだけで良いと思います。

投稿日時 - 2010-04-14 16:42:36

お礼

ありがとうございます
無事レコードに重複せず参照できました

投稿日時 - 2010-04-14 20:12:30

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

>aテーブルでジョイントする理由は1レコード単位での
>抽出としたいがためです大変参考になりました
>ありがとうございます

横展開したいだけならUNIONで項目をずらしていけばいいのではないでしょうか。

select key as A_key, null as B_key, null as C_Key from A
union
select null as A_key, key as B_key, null as C_Key from B
union
select null as A_key, null as B_key, key as C_Key from C

前提条件をはっきりしていただけると、もう少しピンポイントで回答できるとおもいます。

投稿日時 - 2010-04-14 14:22:39

ANo.1

構文的にはあっているようですが,
A、B、CをUNIONしたXとさらにA、B、Cとジョインする意味はないと思います。

単純にX内のAと外のAは別テーブルなのか、X内のA、B、Cを外で参照できると勘違いしているのか、X内のAと外のAに意味はないのかはっきりさせてください。

()内でUNIONした者はXという別名がついているのでX.keyと指定しないと参照出来ません。

投稿日時 - 2010-04-14 10:18:38

お礼

この質問より前につまづいていた
問題があるのですが
下記の方の質問と似ていることから
このsql文を参照しました

その為再度aテーブルでジョイントする
理由は1レコード単位での
抽出としたいがためです大変参考に
なりました
ありがとうございます

大戦

投稿日時 - 2010-04-14 12:57:51

あなたにオススメの質問