PostgreSQLを利用しています。
やりたいこと
2つのテーブルを結合して、下記のようなデータを取りたいです。
name | total_sales | productcreated |
product1 | xxx | YYYY.MM.DD |
product2 | xxx | YYYY.MM.DD |
product3 | xxx | YYYY.MM.DD |
product4 | xxx | YYYY.MM.DD |
product5 | xxx | YYYY.MM.DD |
name,productcreatedはtbl1に、
total_salesはtbl2に格納されています。
やったこと
こちらのSQLを実行しました。
lang
1select 2 product_name, 3 tbl2.total_sales, 4 to_char(tbl1.created, 'YYYY.MM.DD') as productcreated 5 6from tbl1 7inner join tbl2 on tbl1.id = tbl2.product_id 8 9where product_name in ('aaaaa','bbbbbb','ccccccc','ddddd','eeeee','fffff','gggggg') 10 11order by productcreated desc 12
わからないこと
下記のようにいくつかのデータが抜けてしまいます。
※Tbl2に条件の合うデータがない場合、抜けてしまします。
name | total_sales | productcreated |
product1 | xxx | YYYY.MM.DD |
product3 | xxx | YYYY.MM.DD |
product4 | xxx | YYYY.MM.DD |
tbl2に該当のproduct_idのレコードがなくともNULLなどが入るようにし、where句で指定した全件分のデータを取得するには、どのようにsqlを記述しなおせばよろしいでしょうか。
よろしくお願いいたします。
追記
外部結合をする必要があるという回答を頂き、以下のように書き換えてみたのですが、まだ思うような結果がえられていません。(left join と right join の両方を試してみました。)
結果としては、inner join で結合をしていた時と同じになってしまっています。
lang
1select 2 product_name, 3 tbl2.total_sales, 4 to_char(tbl1.created, 'YYYY.MM.DD') as productcreated 5 6from tbl1 7right join tbl2 on tbl1.id = tbl2.product_id 8 9where product_name in ('aaaaa','bbbbbb','ccccccc','ddddd','eeeee','fffff','gggggg') 10 11order by productcreated desc 12
追記2
シンプルにしようと、関係がないと思っていた情報を省いていたのですが、実は重要な情報ではないかと思い直しましたので、追記させていただきます。
weher句のところに、別の条件を2つ書いていました。
こちらが原因でしょうか。
lang
1select 2 product_name, 3 tbl2.total_sales, 4 to_char(tbl1.created, 'YYYY.MM.DD') as productcreated 5 6from tbl1 7left join tbl2 on tbl1.id = tbl2.product_id 8 9where product_name in ('aaaaa','bbbbbb','ccccccc','ddddd','eeeee','fffff','gggggg') 10-- ★追記したもの★ 11and tbl2.xxx = X 12and tbl2.yyy = Y 13-- ★追記したもの★ 14 15order by productcreated desc
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/23 04:07