![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
こんにちは、外部結合の仕方についてお聞きしたいのですが、
このSQL1で抽出されたデータにさらに
TABLE3テーブルのデータを追加したくSQL2を作成したのですが、
うまくいきません。
ON TABLE1.[Code]=TABLE3.[Code]の部分をどのように記述すればよいのでしょうか?
SQL1---------
TABLE1.[tamp] [Child],
TABLE2.*
FROM [p].[Price] TABLE1
LEFT OUTER JOIN [p].[Receive] TABLE2
ON TABLE2.[Code]=TABLE1.[Code]
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]
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
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(アニメ・マンガ・特撮) 腐女子ってマナーが悪いですよね? 2 2023/04/10 17:56
- カスタマイズ(車) 2003年式レガシィB4 2.0GT TA-BL5に乗ってるのですが このマイルドダンパーという車高 2 2023/06/11 22:09
- その他(趣味・アウトドア・車) BLが好きだと決めつけられます。 1 2022/04/24 10:25
- バイク車検・修理・メンテナンス ジャイロキャノピーta-02のマフラー詰まり改善方法。 マフラーが詰まっています。 取り外さずに詰ま 2 2023/02/06 20:29
- Visual Basic(VBA) chromedriverのver-upで動作不安定となった 3 2022/07/07 11:32
- マンガ・コミック ホモでは無いんですがBL系が結構すきです。 ドラマやアニメや漫画のBL好きなんですが 現実では普通で 4 2022/09/22 03:04
- ドライブ・ストレージ 曲の保存場所について 3 2023/05/19 01:47
- Google Drive MTSファイルについて 1 2023/05/11 15:28
- カスタマイズ(車) 2003年式レガシィB4 2.0GT TA-BL5に 18インチ 7.5J オフセット+40を履かせ 1 2023/06/01 12:19
- マンガ・コミック BL注意。受けが可愛くて濡れ場もあるBL漫画教えて欲しいです! 1 2022/09/19 01:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイルで複数フォルダ...
-
副問合せにLIKE文を使う方法は...
-
IPアドレスを数値に変換
-
videopad 無料版 アンインストール
-
スナップショット取得について...
-
sqlで質問です。 Aテーブルは店...
-
SQLの中上級者へのレベルアップ...
-
SELECTによる表の変換方法を教...
-
開発対象となるアプリケーショ...
-
質問です。 下記のテーブルとデ...
-
Oracleですがsqlで質問です。 ...
-
sqlで質問です。 Aテーブルの登...
-
sqlで質問です。 Aテーブルの情...
-
SQLの書き方について
-
SQLについて教えて下さい。 主...
-
sqlで質問です。 idを元にidに...
-
oracleで 10,20, 30, というデ...
-
索引作成について
-
googleプレイの履歴で取得とイ...
-
sql(oracle)で質問です。 テ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの外部データ取り込み...
-
SQLローダーCSV取込で、囲み文...
-
単一グループのグループ関数で...
-
select文の実行結果に空白行を...
-
テーブルの最後(最新)のレコー...
-
count関数の値をwhere句で使用...
-
【PL/SQL】FROM区に変数を使う方法
-
AccessのSQL文で1件のみヒット...
-
レコードの登録順がおかしい
-
SELECT FOR UPDATE で該当レコ...
-
複数のテーブルから値を合計出...
-
where句中のtrim関数について
-
2つの列が同じ値の行を取得するSQL
-
並べ替えについて
-
Oracleで「文字が無効です」の...
-
1の行を固定した上でVBAを用い...
-
group byの並び順を変えるだけ...
-
アクセスのレポートでレコード...
-
<SQL>重複しているデータの場合...
-
SQLで条件にヒットしたレコード...
おすすめ情報