我有两张桌子
游戏和分数:
游戏有一个主键ID
分数有game_id,它引用了games.id并在其他领域中创建。
我正在尝试调整此question的已接受答案中的第二个示例,以满足我的需求。
SELECT g.*,
s.*
FROM GAMES g
LEFT JOIN SCORES s ON s.game_id = g.id
JOIN (SELECT n.game_id,
MAX(n.created_on) AS max_score_date
FROM SCORES n
GROUP BY n.game_id) y ON y.game_id = s.game_id
AND y.max_score_date = s.created_on
它几乎可以工作,它获得每个游戏的得分表中的最新条目。但是它只返回在得分表中有相应条目的游戏。如果他们在得分表中有一个条目,我需要它返回表格中的所有游戏。从阅读前面提到的问题我假设左连接将完成。
答案 0 :(得分:3)
SELECT
g.*, s.*
FROM
GAMES g
LEFT JOIN
(
SCORES s
INNER JOIN
(
SELECT
n.game_id, MAX(n.created_on) AS max_score_date
FROM
SCORES n
GROUP BY
n.game_id
)
y
ON y.game_id = s.game_id
AND y.max_score_date = s.created_on
)
ON s.game_id = g.id
答案 1 :(得分:1)
您需要额外的左外连接:
SELECT g.*, s.*
FROM GAMES g LEFT JOIN
SCORES s
ON s.game_id = g.id LEFT OUTER JOIN
(SELECT n.game_id, MAX(n.created_on) AS max_score_date
FROM SCORES n
GROUP BY n.game_id
) y
ON y.game_id = s.game_id AND y.max_score_date = s.created_on
这个版本应该做你想要的:
select g.*, s.*
from (select g.*,
(select max(created_on) as maxcreatedon
from scores s
where s.game_id = g.game_id
) as maxcreatedon
from games g
) g left outer join
scores s
on s.game_id = g.game_id and
s.created_on = g.maxcreatedon