電子書籍の厳選無料作品が豊富!

以下のような3つのテーブルから、テーブル①の行はフルに表示した状態で、テーブル②と③を結合した状態でOUTER LEFT JOINをしたいのですが、うまくいきません。
下記のように記載すると、どうしても②と③で一致したものに限定されてしまい、テーブル①のデータを全て表示させることができないため、ご教授いただきたいです。

<試してみたクエリ1>
 ※テーブル②と③にある項目しか抽出されないため、テーブル①のID:4,5が消える・・・
select * from テーブル① outer left join テーブル② on テーブル①.ID = テーブル②.ID,
テーブル③
where テーブル②.金額 = テーブル③.金額

<試してみたクエリ2>
 ※テーブル①と③に共通する項目がないため、以下じゃ不可でした・・・
select * from テーブル① outer left join テーブル② on テーブル①.ID = テーブル②.ID,
outer left join テーブル③ on テーブル②.金額 = テーブル③.金額


--------------------------
【ベースとなるテーブル】
--------------------------
テーブル①
  ID    商品名
  1    あああ
  2    いいい
  3    ううう
  4    えええ
  5    おおお

テーブル②
  ID    金額   個数
  1    1000   10
  2    2000   30
  3    3000   20
  5    5000   40

テーブル③
  金額   レベル
  1000   1
  2000   3
  3000   15
4000 20

--------------------------
【出したい抽出結果】
--------------------------
  ID    商品名  金額  個数 レベル
  1    あああ  1000  10  1
  2    いいい  2000  30  3
  3    ううう  3000  20  15
  4    えええ  NULL  NULL NULL
  5    おおお  5000  NULL NULL

A 回答 (2件)

<試してみたクエリ2> でいいはずです。


具体的に、どんな理由で「不可」なのでしょうか?


* で全て選択しているので、 「 テーブル②.ID がNULLになっている」のを見て、「IDがNULLになっている」と思いこんで「だめ」と思ってたりしませんか?
(または、テーブル③.金額 がNULLになっているのを見て)



 ID    商品名  金額  個数 レベル
 5    おおお  5000  NULL NULL

であってますか?
個数は テーブル②.個数 しかないので、この場合 40 になります。
「テーブル③に該当する金額が無い場合は、個数は テーブル②.個数 ではなくNULLにしたい」ということなら、そういうSQLを書く必要があります。(CASE式を使う等)
    • good
    • 0

なんでwhereにすんの?


そのままジョイン句をつなげたらいいよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!