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

複数の外部結合の仕方について

このQ&Aのポイント
  • 外部結合時のON句の書き方について質問です。
  • SQL1で抽出されたデータにTABLE3のデータを追加するためにSQL2を作成しましたが、うまくいきません。
  • ON TABLE1.[Code]=TABLE3.[Code]の部分をどのように記述すれば良いでしょうか?

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

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

気になったので見直してみたら、微妙に違っていました。すみませんでした。 ・LEFT OUTER JOIN は、左から右に評価されるようです。 ・ON の結合条件は、 ( ) で囲みます。(データベースソフトのSQL解析器によっては省略しても動作することが期待できますが、 ( ) で囲むのが可読性的にもいいと思います) というわけで、 FROM 句を修正するとうまくいくかもしれません。 FROM [p].[Price] TABLE1 LEFT OUTER JOIN [p].[Receive] TABLE2 ON (TABLE2.[Code]=TABLE1.[Code]) LEFT OUTER JOIN [p].[Product] TABLE3 ON (TABLE1.[Code]=TABLE3.[Code]) ところで、なぜ下のように結合しているのですか? Price -< Receive -< Product 下のようになる気がするのですが・・・? 私の勘違いでしょうか? Receive -< Product -< Price

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

その他の回答 (2)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

うまくいかないというのは具体的にどうなるのでしょうか。 記載のSQLだけを見る限りは別におかしくはないと思います。 たとえば、 with ta as ( select '1' code, '11' value from dual --3テーブル全部あり union all select '2' code, '22' value from dual --ta,tbのみ union all select '3' code, '33' value from dual --ta,tcのみ union all select '4' code, '44' value from dual) --taのみ ,tb as ( select '1' code, '111' value from dual union all select '2' code, '222' value from dual) ,tc as ( select '1' code, '1111' value from dual union all select '3' code, '3333' value from dual) --ここからSELECT本体 select * from ta table1 left join tb table2 on table1.code = table2.code left join tc table3 on table1.code = table3.code order by table1.code; というSQLの場合、 code value code_1 value_1 code_2 value_3 1 11 1  111 1  1111 2 22 2  222 null null 3 33 null null 3  3333 4 44 null null null null となります。期待通りの結果です。 各テーブルのデータと期待する結果、現状の結果を記載した方が分かりやすいと思います。 また、Oracleのバージョンも明記した方がいいですよ。

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

( ) を忘れているように思います。 SQL2---------- TABLE1.[tamp] [Child], TABLE2.*, TABLE3.* FROM ( [p].[Price] TABLE1 LEFT OUTER JOIN [p].[Receive] TABLE2 ON TABLE2.[Code]=TABLE1.[Code] ) LEFT OUTER JOIN [p].[Product] TABLE3 ON TABLE1.[Code]=TABLE3.[Code] FROM (テーブル名 LEFT OUTER JOIN テーブル名 ON 条件式) LEFT OUTER JOIN テーブル名 ON 条件式 通常、上のような構文にしたがっていないとうまく処理されません。

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

関連するQ&A