アプリ版:「スタンプのみでお礼する」機能のリリースについて

RDBに関する質問です。
(MySQLを想定してますが、ほかのRDBでも同じだと思います。)

Tableが4つあり、
TableAにはId、Nameの2カラム。
(IDが主キー)

TableBにはId, Id_A, Name, DateTimeの4カラム。
(IDが主キー、Id_Aは外部キーでTableAを参照)

TableCにはId, Nameの2カラム。
(IDが主キー)

TableDにはId, Id_B, Id_C, Name2のカラム。
(Idが主キー、Id_Bは外部キーでTableBを参照。Id_Cは外部キーでTableCを参照。
Id_B、Id_Cは二つ合わせてユニークキーにしています。)


これらのテーブルに画像通りのレコードが入っているとします。

このデータの中から、以下の条件を満たすレコードをとりたいと思っています。

・ 取りたいレコードはTableDのものです。
・ TableDのレコードのうち、TableAのId=1のみ。
・ TableDのレコードのうち、対応するTableBレコードが一番新しいもののみを取得する。

つまり、画像の緑の部分のレコードとりたいです。
どのようなSQL文を書けば取得できるでしょうか?

前回同じような質問をさせていただいたのですが、図でTableDのId=5のデータを着色し忘れてしまいました。
そのため、もう一度質問させていただきます。

前回いただいた解答は

SELECT TableD.*
FROM TableD INNER JOIN TableB ON TableD.Id_B = TableB.Id
WHERE TableB.Id_A = 1 AND TableB.DateTime =
(SELECT MAX(DateTime) FROM TableB AS B
WHERE B.Id_A = TableB.Id_A);

だったのですが、TableDのId=5が取得できませんでした。
(もちろん私のミスです。前回ご回答いただいた方、ご迷惑をおかけして申し訳ありません。)

再度、お願いいたします。

「SQL文についての質問です。」の質問画像

A 回答 (1件)

・ 取りたいレコードはTableDのものです。


・ TableDのレコードのうち、TableAのId=1のみ。
・ TableDのレコードのうち、対応するTableBレコードが一番新しいもの

以上の条件ではTableDのId=5が取得できません。
    • good
    • 4
この回答へのお礼

ありがとうございます。

お礼日時:2022/02/27 16:43

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