如何在mysql中左键连接多个一对多表?
我在mysql中连接三个表时遇到问题 假设我们有一个名为如何在mysql中左键连接多个一对多表?,mysql,sql,join,left-join,Mysql,Sql,Join,Left Join,我在mysql中连接三个表时遇到问题 假设我们有一个名为posts的表,我把我的条目保存在其中,我有一个名为likes的表,我在其中存储用户id和post id,还有一个名为comments的表,我在其中存储用户id和post id以及注释文本 我需要一个查询,获取我的条目列表,以及每个条目的赞数和注释数 我正在使用此查询: SELECT posts.id, count(comments.id) as total_comments, count(likes.id) as total_likes
posts
的表,我把我的条目保存在其中,我有一个名为likes
的表,我在其中存储用户id和post id,还有一个名为comments
的表,我在其中存储用户id和post id以及注释文本
我需要一个查询,获取我的条目列表,以及每个条目的赞数和注释数
我正在使用此查询:
SELECT posts.id, count(comments.id) as total_comments, count(likes.id) as total_likes
FROM `posts`
LEFT OUTER JOIN comments ON comments.post_id = posts.id
LEFT OUTER JOIN likes ON likes.post_id = posts.id
GROUP BY posts.id
但是这个查询有一个问题,如果一个条目的注释为空,那么likes计数就可以了,但是假设一个条目有2个注释和4个likes,那么total_comments和total_likes都将是“8”,这意味着mysql将它们相乘。
我很困惑,我不知道我该怎么办
感谢advace。使用
count(distinct comments.id)
和count(distinct likes.id)
,前提是这些id是唯一的。这是一种方法(假设mysql允许派生表):
您还可以使用相关子查询。当没有匹配的记录时,您可能需要一个案例陈述来说明输入0的原因
让我们尝试一个相关子查询:
SELECT posts.id,
(select count(Id) from comments where post_id = posts.id) as total_comments,
(select count(Id) from likes where post_id = posts.id) as total_likes
FROM `posts`
谢谢,但此查询返回的第一条记录为12个喜欢和2个注释(它有4个喜欢和2个注释),其他所有行为空。看起来相关子查询路径可能是最好的。我还没有听说过它们。你应该尽最大努力避免子查询我同意这就是为什么;这不是我的第一个建议
SELECT posts.id,
(select count(Id) from comments where post_id = posts.id) as total_comments,
(select count(Id) from likes where post_id = posts.id) as total_likes
FROM `posts`