前提・実現したいこと
複数のテーブルをサブクエリで結合し、且つWith句を利用してデータを取得しようとしたところ、
データがnullになってしまう現象が発生します。どのようにSQLを記載すれば問題が解決できますでしょうか。
お知恵をおかしください。
メインテーブル as メイン 商品ID, 仕入れ日 配送テーブル as 配送 商品ID, 配送ID 配送詳細テーブル as 配送詳細 配送ID, 配送サービス名, 更新日
このようなテーブルがあり、各商品ID毎の配送サービス名を表示したいです。
配送詳細テーブルは、配送サービスを変更するごとにその時の更新日とともに行数が増えてしまうので、
1商品IDに対して一つの配送サービス名が表示されるようなSQLを書きたいです。
※配送サービスを更新する毎に下記のようになってしまうので、
「補足」配送サービス毎に配送IDが異なります。
配送ID, 配送サービス名, 更新日
12345,ヤマト, 2020-01-01
32145, 佐川, 2019-12-01
可能な限り下記のベースとなるWith句を用いて記載したいです。
該当のソースコード
SQL
1 2with 配送情報 as 3( 4Select 配送.商品ID, 配送詳細.配送サービス名, 配送詳細.更新日 5from 配送テーブル as 配送 6 7left join 配送詳細テーブル as 配送詳細 8on 配送.配送ID = 配送詳細.配送ID 9order by 配送詳細.更新日 DESC limit 1 10) 11 12SELECT メイン.商品ID, 配送情報.配送サービス名 13from メインテーブル as メイン 14LEFT JOIN 配送情報 on 15配送情報.商品ID = メイン.商品ID 16
上記コードの結果
上記コードを走らせると、
なぜか
メイン.商品ID, 配送情報.配送サービス名 xxxxxx123, null
というデータがかえってきます。
with句のなかに下記のように商品IDを特定すると結果はしっかり帰ってきます。
with 配送情報 as ( Select 配送.商品ID, 配送詳細.配送サービス名, 配送詳細.更新日 from 配送テーブル as 配送 left join 配送詳細テーブル as 配送詳細 on 配送.配送ID = 配送詳細.配送ID where 配送.商品ID = xxxxxx123 order by 配送詳細.更新日 DESC limit 1 )
ただデータを取得する際には大量な商品IDのデータを取得するので、
With句内のwhereで商品IDを指定することはできない状況です。
この問題を解決するにはどのようなSQLを記載すべきでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/27 07:53
2020/09/27 08:14 編集
2020/09/27 09:08