SQL查询COUNT有两个连接

时间:2015-12-31 10:15:37

标签: mysql sql

我正在尝试从3个表(消息,user_comment_messages和user_like_messages)创建一个SQL查询,我需要获取每个消息的列表以及喜欢和评论的总数,实际上我正在尝试这样:< / p>

SELECT m.id, COUNT(c.id) AS t_comment, COUNT(l.id) AS t_like
FROM messages m
JOIN user_comment_messages c ON c.message_id = m.id
JOIN user_like_messages l ON l.message_id = m.id
GROUP BY m.id;

当我执行查询时,我在两列中得到相同的值并且不正确。所以我尝试了一个子查询:

SELECT m.id,
(SELECT COUNT(*) FROM user_comment_messages c WHERE m.id = c.message_id) AS t_like,
(SELECT COUNT(*) FROM user_like_messages l WHERE m.id = l.message_id) AS t_comment
FROM messages m
ORDER BY m.id

这很有效,但在我的开发环境中,我不能使用子选择,只能使用连接。还有另一种方法可以实现吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

我认为您可以在distinct函数中使用count来计算commentidlikeid s的不同出现次数:

SELECT m.id, 
       COUNT(DISTINCT c.id) AS t_comment, 
       COUNT(DISTINCT l.id) AS t_like
FROM messages m
LEFT JOIN user_comment_messages c ON c.message_id = m.id
LEFT JOIN user_like_messages l ON l.message_id = m.id
GROUP BY m.id;

答案 1 :(得分:0)

您使用LEFT JOIN,这样您就可以获得喜欢或评论或没有喜欢或评论的所有消息。

SELECT m.id, 
       IFNULL(COUNT(DISTINCT c.id),0) AS t_comment, 
       IFNULL(COUNT(DISTINCT l.id),0) AS t_like
FROM messages m
LEFT JOIN user_comment_messages c ON c.message_id = m.id
JOIN user_like_messages l ON l.message_id = m.id
GROUP BY m.id;