我有一个表保存用户评论,我想检索每个用户发表的最后一条评论.
下面的查询应该让我知道我想要做什么
select comment, comment_id, userId FROM comments_table
WHERE comment_id in (
SELECT MAX(comment_id)
FROM comments_table where userId in (2001, 2002, 2010)
GROUP BY userId
)
Run Code Online (Sandbox Code Playgroud)
以上查询有效,但需要太长时间,特别是如果有很多userIds.
我需要一个更快的查询语句来完成同样的事情.
使用连接而不是子查询:
SELECT
b.*
FROM
(
SELECT userid, MAX(comment_id) AS maxcomment
FROM comments_table
WHERE userid IN (2001, 2002, 2010)
GROUP BY userid
) a
INNER JOIN
comments_table b ON
a.userid = b.userid AND
a.maxcomment = b.comment_id
Run Code Online (Sandbox Code Playgroud)
此查询中的子选择将只执行一次,而不是WHERE IN将对comments表中的每一行执行的子查询.