こんにちは。
mysqlのselect文なのですが、LEFT OUTER JOIN した右側をgroup byし、そのなかで最大値を持つものを結び付けたいのですが、四苦八苦やってみたところ2日ほど解決できず・・・。
どなたかご教授いただけますと助かります。
テーブルなどは以下の通りです。
---tableA----(テーブル名)
user / supplier(カラム名、以下レコード)
1 / 1
1 / 2
1 / 3
2 / 1
2 / 3
---tableB---
skuno / supplier / update_at
1 / 1 / 2011-12-12
2 / 1 / 2011-12-13
3 / 1 / 2010-11-10
検索の目的は、特定のカラムuserに対応する(例えばuser = 1)supplierの値(1,2,3)を取り出し、tableBにおいて、それぞれの値に結びつくskunoのうち最新のupdate_atを持つskunoを取り出したいというものです。
上記の例の場合、希望する検索結果は以下のような想定です。
supplier / skuno
1 / 2
2 / null
3 / null
私が検討してみたsql文は以下の通りなのですが、
select supplier,skuno from tableA LEFT JOIN tableB ON tableA.supplier = tableB.supplier where tableA.user = 1 and tableB.update_at IN (select max(update_at) from tableB group by supplier) group by tableA.supplier;
この場合だと、右側がnullだとsupplierの値が表示されず、
supplier / skuno
1 / 2
となってしまいます。
select supplier,skuno from tableA LEFT JOIN tableB ON tableA.supplier = tableB.supplier where user = 1 group by supplier;
だと右側のテーブルの値が指定できず・・・
ここからどのように条件付けをしたらよいのか、お力添えをいただけますと幸いです。
よろしくお願い申し上げます。
No.1ベストアンサー
- 回答日時:
こうすれば希望する検索結果になるんじゃないでしょうか
SELECT a.supplier,b.skuno,max(update_at) from a
LEFT JOIN b ON a.supplier = b.supplier
WHERE a.user = 1 GROUP BY a.supplier;
問題はupdate_atフィールドで、「update_at IN (select max」の条件が適用される時、結合テーブルからsupplier2,3が消えるのが困るわけですよね。
まさにその通りです!
なんだかややこしい方に考えてしまっていたみたいで・・・。
お力添えの程、ありがとうございましたm(_ _)m
No.3
- 回答日時:
こうですね
select a.supplier,b.skuno
from tableA as a
left join tableB as b on b.supplier=a.supplier
and (b.supplier,b.update_at) IN (select supplier,max(update_at) as update_at from tableB group by supplier)
where user=1
No.2
- 回答日時:
こんな感じでしょうか・
MySQLの環境が無く動作確認はしていないので、文法エラーなどがあったら適宜修正してください。
select A.supplier, B.skuno
from tableA as A
left join tableB as B on (
A.supplier = B.supplier
and B.update_at IN (
select max(update_at)
from tableB as B2
where B.supplier = B2.supplier
group by supplier))
where A.userid = 1;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
CDの保有枚数を教えてください
ひとむかし前はCDを買ったり借りたりが主流でしたが、サブスクで簡単に音楽が聴ける今、CDを手に取ることも減ってきたかと思います。皆さんは2024年現在、何枚くらいCDをお持ちですか?
-
【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
【お題】 ・買ったばかりの自転車を分解してひと言
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
GROUP BYを行った後に結合したい。
Oracle
-
LEFT JOIN と GROUP BY
MySQL
-
MAX関数を使ってからLEFT JOINしたいのですが・・
PHP
-
-
4
結合したテーブルをSUMしたい
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
count関数の値をwhere句で使用...
-
小数点以下桁数が最大の値に小...
-
SQLローダーCSV取込で、囲み文...
-
ファイルの漢数字の順番につい...
-
トランザクションログを出力せ...
-
レコードの登録順がおかしい
-
【PL/SQL】FROM区に変数を使う方法
-
2つの列が同じ値の行を取得するSQL
-
SQL*Loader Append
-
テーブルの最後(最新)のレコー...
-
<SQL>重複しているデータの場合...
-
group byの並び順を変えるだけ...
-
select文の実行結果に空白行を...
-
並べ替えについて
-
エクセル、並び替え正しくソー...
-
SQLで条件にヒットしたレコード...
-
テーブルレーコードをソートし...
-
mysqlに格納されている日付のデ...
-
アクセスで曜日の並び順を変えたい
-
where句中のtrim関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
count関数の値をwhere句で使用...
-
OUTER JOIN とgroup by
-
小数点以下桁数が最大の値に小...
-
結合したテーブルに名前をつけ...
-
金額の計算方法
-
Perlからのアクセス。カウント...
-
ストアドファンクションの再帰...
-
日本語で、likeを使うと値が正...
-
同一カラム名でjoinしたところ...
-
市区町村別の件数をカウントす...
-
最大値の数をカウントしたい
-
重複レコードの抽出
-
複雑な並び替え処理
-
SQL 自己結合で件数の条件指定
-
【バグ?】ORDER BY DESCでempty
-
SQLローダーCSV取込で、囲み文...
-
select文の実行結果に空白行を...
-
単一グループのグループ関数で...
-
【PL/SQL】FROM区に変数を使う方法
-
ファイルの漢数字の順番につい...
おすすめ情報