计入多重联接语句

时间:2019-05-04 08:42:51

标签: mysql join left-join

我有三个表 Post: int id, varchar title 评论: int comment_id, int post_id, varchar comment 类似: int like_id, int post_id
在这里post_id是一个外键引用表 post 。 / p>

我正在尝试获取所有帖子以及每个帖子的评论数和喜欢数。

这是我到目前为止所做的:


    SELECT post.id, post.title, count(comment.id) as comments,

    FROM post

    left join comment on comment.post_id = post.id

    GROUP by post.id

这给了我所有帖子的结果以及每个帖子的评论数量。现在,当我为“喜欢”表添加下一个左联接时,计数结果将返回其实际值的两倍。

例如,如果某个帖子X有2条评论,并且我添加了 like 表,则加入同一帖子的计数,然后开始给我4条关于帖子X的评论总数。

帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

我将使用两个单独的子查询来编写此代码以查找评论和喜欢的次数:

SELECT
    p.id,
    p.title,
    COALESCE(c.comment_cnt, 0) AS comments,
    COALESCE(l.like_cnt, 0) AS likes
FROM post p
LEFT JOIN
(
    SELECT post_id, COUNT(*) AS comment_cnt
    FROM comments
    GROUP BY post_id
) c
    ON p.id = c.post_id
LEFT JOIN
(
    SELECT post_id, COUNT(*) AS like_cnt
    FROM likes
    GROUP BY post_id
) l
    ON p.id = l.post_id;