テーブル結合について、下記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
敢えていうなら、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にするだけで良いと思います。
>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
前提条件をはっきりしていただけると、もう少しピンポイントで回答できるとおもいます。
お礼
ありがとうございます 無事レコードに重複せず参照できました