- ベストアンサー
テーブルのOR外部結合とは?
- テーブルのOR外部結合は、複数のテーブルを結合する際に、条件に合致する行を取得します。この結合方法では、テーブル間でOR条件を指定することができます。
- 現在の方法では、ORによる外部結合でエラーが発生してしまうため、(T1+[架空のT2_ID]+T3) UNION (T1+T2+T3)という回避策を取っています。しかし、テーブルの出力カラム数の増加や複雑な結合条件などにより、扱いづらくなっています。
- テーブルの条件をまとめるためには、条件を簡潔に表現する方法を探す必要があります。しかし、現時点では※1のようにテーブルをまとめることはできません。より効率的な結合方法を検討してください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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 でどうですか?
その他の回答 (3)
- nora1962
- ベストアンサー率60% (431/717)
提示されたデータでは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 で要求された結果が得られてしまいます。必要な条件を追加してください。
補足
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 以上のような形です。 並び順位については気にしておりません。 とりあえず見えやすいかな?という形にしてあります。
- nda23
- ベストアンサー率54% (777/1415)
抽出条件が今一つハッキリしません。 T1 T2 T3 出力 × - - × T1に無いものは出力しない ○ × × × T1だけのも出力しない ○ ○ × ○ T3に無くても出力する ○ ○ ○ ○ 全て有れば出力する ○ × ○ × T2に無いものは出力しない このような条件なんでしょうか?
補足
nda23 様 T1 T2 T3 出力 × - - × ○ × ○ ○ ○ ○ × ○ ○ ○ ○ ○ ○ × ○ ○ 以上のような形です。わかりづらくすみませんでした。 nora1962様のANo.3の補足も参考していただけると幸いです。
- nora1962
- ベストアンサー率60% (431/717)
T1_ID,T2_ID,T3_IDのデータはどんなものですか。
補足
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についても抽出条件がかなり違っていました。 失礼しました。
お礼
nora1962様 ありがとうございます。要求どおりの結果が得られました。 ですがTBL3の内容が違うかもしれないということですので その際にはまた別スレにて質問させていただきます。 最後までお付き合いいただきありがとうございました。