目的: 我想了解已发布或喜欢特定类别帖子的唯一身份用户数。
我有两个表posts
和likes
,其中包含以下字段
帖子:
id,
user_id,
category
喜欢:
id,
user_id,
post_id
现在,我想根据特定类别在posts
中找到不同的user_id值
likes
中的不同user_id值,以及这两个结果集的并集。
我正在使用以下Mysql查询来实现此目的:
SELECT user_id FROM posts WHERE category = 0 union SELECT user_id from likes where likes.post_id in (select id from posts where category = 0)
我想知道我是否得到了预期的结果,并且如果有更好的方法来实现这一点而不必使用子查询。
在您投票之前,请在评论中提及相同的原因。
答案 0 :(得分:1)
您只能通过INNER JOIN
替换子查询来加快效果。
SELECT
user_id
FROM posts
WHERE category = 0
UNION
SELECT
likes.user_id
FROM likes
INNER JOIN posts
ON likes.post_id = posts.id
WHERE posts.category = 0;
如果likes.post_id
被正确编入索引且posts.id
为PK/indexed
,则速度会快得多。