前提・実現したいこと
[商品(マスタ)]と[購入(データ)]のテーブルから、返品されなかった商品の数量を
count()関数で求めるSQL文を作成しています。
[購入(データ)]に商品のレコードがない場合にでも、[期待する結果]のように数量を0として
結果を求めたいのですが、条件に返品なしの商品(返品=0)を追加すると、
数量0の結果が表示されなくなります。
JOIN部分を色々と変えて試してみたのですが期待する結果が得られません。
JOINを使うのは間違えなのでしょうか?ご教授いただければ幸いです。
[商品(マスタ)]
商品番号 | 商品名 |
---|---|
1 | リンゴ |
2 | バナナ |
3 | ミカン |
[購入(データ)]
購入番号 | 商品番号 | 返品 |
---|---|---|
1 | 1 | 0 |
2 | 1 | 0 |
3 | 1 | 1 |
4 | 3 | 0 |
5 | 3 | 1 |
[期待する結果]
商品(マスタ)にある商品で、返品されなかった商品(購入.返品=0)の集計を求める
数量 | 商品番号 | 商品名 |
---|---|---|
2 | 1 | リンゴ |
0 | 2 | バナナ |
1 | 3 | ミカン |
発生している問題・エラーメッセージ
期待する結果を求めるSQLを実行したのですが、下記の結果のように、バナナの数量0のレコードが出力されません。
数量 | 商品番号 | 商品名 |
---|---|---|
2 | 1 | リンゴ |
1 | 2 | ミカン |
該当のソースコード
SELECT COUNT(k.購入番号) AS 数量, s.商品番号, s.商品名, FROM 購入 AS k RIGHT OUTER JOIN 商品 AS s ON k.商品番号 = s.商品番号 WHERE k.返品 = 0 GROUP BY k.商品番号
試したこと
WHERE条件を除くとバナナの数量0のレコードが出力されます。
SELECT COUNT(k.購入番号) AS 数量, s.商品番号, s.商品名, FROM 購入 AS k RIGHT OUTER JOIN 商品 AS s ON k.商品番号 = s.商品番号 GROUP BY k.商品番号
数量 | 商品番号 | 商品名 |
---|---|---|
3 | 1 | リンゴ |
0 | 2 | バナナ |
2 | 3 | ミカン |
補足情報(FW/ツールのバージョンなど)
サーバのバージョン: 10.4.11-MariaDB - mariadb.org binary distribution
データベースクライアントのバージョン: libmysql - mysqlnd 7.4.2
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/03 07:37 編集
2020/07/03 07:44
2020/07/03 07:45 編集
2020/07/03 07:51 編集
2020/07/03 07:52
2020/07/03 07:55
2020/07/03 08:39 編集
2020/07/03 08:51