有三张桌子。 用户,赞,评论。表赞和评论包含与用户关联的行。我需要所有用户的相关行数来自表和评论。当只有一个表关联时,这很容易做到。但是,这是我的查询。
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
答案 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示例。