使用子查询计算表1和表2的并集中的不同值

时间:2016-07-17 07:54:00

标签: mysql database

目的: 我想了解已发布或喜欢特定类别帖子的唯一身份用户数。

我有两个表postslikes,其中包含以下字段

帖子:

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)

我想知道我是否得到了预期的结果,并且如果有更好的方法来实现这一点而不必使用子查询。

在您投票之前,请在评论中提及相同的原因。

1 个答案:

答案 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.idPK/indexed,则速度会快得多。