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

解決済みの質問

テーブルのOR外部結合

※1
SELECT
 T1.*,
 T2.*,
 T3.*
FROM
 TBL1 T1,
 TBL2 T2,
 TBL3 T2
WHERE
 T1.T1_ID = T2.T2_ID(+) AND
 (T1.T1_ID = T2.T2_ID(+) OR T2.T2_ID = T3.T3_ID(+))

結果としては以下のようにしたいです。
T1_ID T2_ID T3_ID
100       300  ←T1とT3の結合結果
101       301      ”
100  200   302  ←T1+T2とT3の結合結果
101  201   303      ”

今のままではORによる外部結合でエラーが出てしまうため
(T1+[架空のT2_ID]+T3) UNION (T1+T2+T3)という回避策を取っていました。
実際にはT1,T2,T3共に出力カラム数が膨大で、更にT1,T2,T3(※1の結果)及びT4UNIONが存在する等、非常に扱いづらくなってしまっています。
なんとか※1のようにまとめることはできないのでしょうか?

投稿日時 - 2008-05-19 11:04:11

QNo.4033477

すぐに回答ほしいです

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

SELECT T1.T1_NM,T2.T2_NM,T3.T3_NM
FROM TBL1 T1,TBL2 T2,TBL3 T3
WHERE T1.T1_ID = NVL(T2.T1_ID,T3.T1_ID)
AND T2.T2_ID(+) = T3.T2_ID
でどうですか?

投稿日時 - 2008-05-19 21:33:53

お礼

nora1962様
ありがとうございます。要求どおりの結果が得られました。
ですがTBL3の内容が違うかもしれないということですので
その際にはまた別スレにて質問させていただきます。
最後までお付き合いいただきありがとうございました。

投稿日時 - 2008-05-20 10:37:11

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

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

回答(4)

ANo.3

提示されたデータではTBL1のデータを参照せずとも
SELECT NVL(T2.T1_ID,T3.T1_ID),T3.T2_ID,T3.T3_ID
FROM
TBL2 T2,TBL3 T3
WHERE T2.T2_ID(+) = T3.T2_ID
で要求された結果が得られてしまいます。必要な条件を追加してください。

投稿日時 - 2008-05-19 17:52:17

補足

nora1962様

テーブル内容
TBL1
T1_ID T1_NM
100  NM1
101  NM2
102  NM3
----------
TBL2
T1_ID T2_ID T2_NM
100  200  NM4
101  201  NM5
----------
TBL3
T1_ID T2_ID T3_ID T3_NM
100      300  NM6
101      301  NM7
102      302  NM8
    200  303  NM9
    201  304  NM10
----------
要求出力結果
T1_NM  T2_NM  T3_NM
NM1         NM6
NM1   NM4    NM9
NM2         NM7
NM2   NM5    NM10
NM3         NM8

以上のような形です。
並び順位については気にしておりません。
とりあえず見えやすいかな?という形にしてあります。

投稿日時 - 2008-05-19 18:08:45

ANo.2

抽出条件が今一つハッキリしません。
T1 T2 T3 出力
× - - × T1に無いものは出力しない
○ × × × T1だけのも出力しない
○ ○ × ○ T3に無くても出力する
○ ○ ○ ○ 全て有れば出力する
○ × ○ × T2に無いものは出力しない

このような条件なんでしょうか?

投稿日時 - 2008-05-19 17:49:41

補足

nda23 様
T1 T2 T3 出力
× - - × 
○ × ○ ○ 
○ ○ × ○ 
○ ○ ○ ○ 
○ × ○ ○ 

以上のような形です。わかりづらくすみませんでした。
nora1962様のANo.3の補足も参考していただけると幸いです。

投稿日時 - 2008-05-19 18:12:33

ANo.1

T1_ID,T2_ID,T3_IDのデータはどんなものですか。

投稿日時 - 2008-05-19 11:52:07

補足

nora1962様

(以上略)
WHERE
 T1.T1_ID = T2.T1_ID(+) AND
 (T1.T1_ID = T3.T1_ID(+) OR T2.T2_ID = T3.T2_ID(+))

テーブル内容
TBL1
T1_ID
100  
101
----------
TBL2
T1_ID T2_ID
100  200
101  201
----------
TBL3
T1_ID T2_ID T3_ID
100      300
101      301
    200  302
    201  303
----------

データは以上のようになります。
またSQLについても抽出条件がかなり違っていました。
失礼しました。

投稿日時 - 2008-05-19 13:00:04

あなたにオススメの質問