使用左连接计算来自多个表的关联行

时间:2015-08-31 16:15:13

标签: mysql sql join left-join

有三张桌子。 用户评论。表评论包含与用户关联的行。我需要所有用户的相关行数来自评论。当只有一个表关联时,这很容易做到。但是,这是我的查询。

SELECT  u.id as id, u.display_name as displayName, 
        COUNT(x.user_id) as likeCount,
        COUNT(y.user_id) as commentCount
FROM `user` u
    LEFT JOIN
        `like` x ON x.user_id = u.id
    LEFT JOIN
        `comment` y ON y.user_id = u.id
GROUP BY u.id

表格关系: 一个用户有很多喜欢 一个用户有很多评论

commentCount 正在计算正确的行数,但 likeCount 会给出错误的行数。 请不要发布使用子查询的答案。我希望它只有一个SELECT子句。我正在使用MySQL。 TIA

1 个答案:

答案 0 :(得分:2)

您可以获得每个表的用户数,如下所示:

SELECT user, COUNT(*) AS t1Count
FROM table1
GROUP BY user;

SELECT user, COUNT(*) AS t2Count
FROM table2
GROUP BY user;

然后你可以将这两个加入Users表来获取每个表的计数。您应该使用COALESCE()以0:

返回空值
SELECT u.id, COALESCE(t1.t1Count, 0), COALESCE(t2.t2Count, 0)
FROM users u
LEFT JOIN(
   SELECT user, COUNT(*) AS t1Count
   FROM table1
   GROUP BY user) t1 ON u.id = t1.user
LEFT JOIN(
   SELECT user, COUNT(*) AS t2Count
   FROM table2
   GROUP BY user) t2 ON u.id = t2.user;

以下是SQL Fiddle示例。

相关问题