• ベストアンサー

SQL:外部結合について

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全てのレコードを抽出したいのですが…。 説明が分かり辛いようでしたら補足します。 よろしくお願いします。

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

  • ベストアンサー
回答No.3

外部結合の幹になる部分を作る。 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(+)

zuuzuuzuu
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • agricap
  • ベストアンサー率40% (79/195)
回答No.4

ベタですが、 (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がないので動作確認できません。

zuuzuuzuu
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • mebun
  • ベストアンサー率45% (10/22)
回答No.2

select pk from a, b, c oder by pk grpoup by pk これではだめですか。

zuuzuuzuu
質問者

補足

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

すると、全ての回答が全文表示されます。
  • kodamashi
  • ベストアンサー率20% (10/49)
回答No.1

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

zuuzuuzuu
質問者

お礼

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

すると、全ての回答が全文表示されます。

専門家に質問してみよう