プロが教えるわが家の防犯対策術!

PKが同じ3つの表(a,b,c)があったとします。
3つの表を外部結合して、
結合条件を満たす全ての行と、
結合条件を満たす行を除いたすべての行をselectしたい。
つまり、3つの表の全てのデータが必要なのですが、
他の表に同じキーのデータがあれば結合して1レコードとしてselectしたいのです。

(例)
|a|b|c|
---------------
|1|1|1|
|2| |2|
| |3| |
| | |4|
|5| | |

a表をもとにb表、c表と結合するやり方は分かるのですが、
それだと、1,2,5しかselectできないですよね?
1,2,3,4,5全てのレコードを抽出したいのですが…。

説明が分かり辛いようでしたら補足します。
よろしくお願いします。

A 回答 (4件)

外部結合の幹になる部分を作る。


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(+)
    • good
    • 0
この回答へのお礼

出来ました!
そういう風に考えれば良いんですね、なるほどー
ありがとうございました!

お礼日時:2006/06/02 00:34

ベタですが、



(SELECT a.*, b.*, c.*
 FROM a left join b on (a.keya = b.keyb) left join c on (a.keya = c.keyc))
  UNOIN
(SELECT a.*, b.*, c.*
 FROM b left join c on (b.keyb = c.keyc) left join a on (b.keyb = a.keya))
  UNION
(SELECT a.*, b.*, c.*
 FROM c left join a on (c.keyc = a.keya) left join b on (c.keyc = b.keyb))

ORACLEがないので動作確認できません。
    • good
    • 0
この回答へのお礼

参考になります!
ありがとうございました。

お礼日時:2006/06/02 00:37

select pk from a, b, c


oder by pk
grpoup by pk
これではだめですか。

この回答への補足

説明も悪かったですね。
補足させていただきます。
PK項目のみ取得したいのであれば、そのSQLで実現できるかもしれませんが、
PK以外の項目も含む全項目を取得したいのです。
分かりやすく書いたつもりだったんですが、すみません。

補足日時:2006/06/01 18:12
    • good
    • 0

結合の方法をFull Outer Joinにしたらできませんか?

    • good
    • 0
この回答へのお礼

出来ませんでした。
もしかしたら、私のSQLが悪いのかも知れません。
サンプルSQLを書いて頂けたら助かります。

お礼日時:2006/06/01 18:03

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