假设我有一个用于在线论坛的 MySQL 数据库,其中包含两个表:
topic : id, ...
message : id, id_topic, created, ...
如您所料,一个主题可能有许多(或没有)消息。
我想获取每个主题记录的列表,该记录左连接到其最近创建的消息记录(或连接如果没有消息,则什么也不做)。我需要结果中两条记录的所有字段。
我一直在做的是使用子查询来创建所有最近创建的消息的表,然后将其连接到主题表。然而,当主题表有几千行而消息表有几十万行时,它真的会陷入困境。
着眼于性能,解决此问题的正确方法是什么?
最佳答案
试试这个:
SELECT t.*, m.*
FROM topic t
LEFT JOIN
(SELECT id_topic, MAX(created) AS created
FROM message
GROUP BY id_topic
) T2 ON t.id = T2.id_topic
LEFT JOIN message m ON m.id_topic = T2.id_topic AND m.created = T2.created
说明:
首先,我们将表主题与为每个 id_topic 创建的最大数量的临时表连接起来。然后表消息与同一个临时表连接。然后从两个表中获取结果。
关于mysql - 将一个表连接到另一个表的 MAX 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23776821/