• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テーブルのOR外部結合)

テーブルのOR外部結合とは?

このQ&Aのポイント
  • テーブルのOR外部結合は、複数のテーブルを結合する際に、条件に合致する行を取得します。この結合方法では、テーブル間でOR条件を指定することができます。
  • 現在の方法では、ORによる外部結合でエラーが発生してしまうため、(T1+[架空のT2_ID]+T3) UNION (T1+T2+T3)という回避策を取っています。しかし、テーブルの出力カラム数の増加や複雑な結合条件などにより、扱いづらくなっています。
  • テーブルの条件をまとめるためには、条件を簡潔に表現する方法を探す必要があります。しかし、現時点では※1のようにテーブルをまとめることはできません。より効率的な結合方法を検討してください。

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.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 でどうですか?

forgedcode
質問者

お礼

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

その他の回答 (3)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.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 で要求された結果が得られてしまいます。必要な条件を追加してください。

forgedcode
質問者

補足

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)
回答No.2

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

forgedcode
質問者

補足

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

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

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

forgedcode
質問者

補足

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についても抽出条件がかなり違っていました。 失礼しました。

関連するQ&A