【发布时间】:2020-10-11 02:01:47
【问题描述】:
我有 3 张桌子:
帖子、主题和子论坛。
一个子论坛有很多线程, 一个 Thread 有很多 Posts。
我正在尝试检索每个子论坛中的最新(目前最大 ID)帖子。
这是我迄今为止尝试过的:
SELECT
p1.id,
p1.thread_id,
Subforums.id as subforum_id
FROM Posts p1 LEFT JOIN Posts p2
ON (p1.thread_id = p2.thread_id AND p1.id < p2.id)
LEFT JOIN Threads
ON p1.thread_id = Threads.id
AND p2.thread_id = Threads.id
LEFT JOIN Subforums
ON Threads.subforum_id = Subforums.id
WHERE p2.id IS NULL
它给了我一张这样的表格:
id | thread_id | subforum_id
12 | 1 | 4
...
我知道我可以使用 MAX 和 GROUP BY 语句的组合来获得每个 subforum_id 的最大值 id,但这看起来根本没有性能。
有没有更好的方法来解决这个问题?
【问题讨论】:
标签: mysql group-by query-optimization greatest-n-per-group