一尘不染

如何在mysql中离开联接多个一对多表?

sql

我在mysql中加入三个表时遇到问题。

可以说,我们有一个表posts,其中保存了我的条目,有一个表likes,其中存储了user_id和post_id,还有第三个表comments,其中存储了user_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

但是此查询存在问题,如果某项的注释为空,则“喜欢”计数就可以了,但是如果某条条目具有2条注释和4个“喜欢”,则total_comments和total_likes均为“
8”,这意味着mysql乘以他们。我很困惑,我不知道该怎么办。

谢谢你的放心。


阅读 155

收藏
2021-05-23

共1个答案

一尘不染

如果这些ID是唯一的,请使用count(distinct comments.id)count(distinct likes.id)

2021-05-23