对某些人来说这可能很简单,但我无法解决。
我有3张桌子:
团队,用户,标签
Teams Users Tags
------------------- ------------------ -----------------------
userID | teamUserID userID | username userID | name | value
------------------- ------------------ -----------------------
1 | 2 1 | dan 2 | myTag | 1
1 | 3 2 | bob 2 | aTag | 2
1 | 4 3 | jon 3 | bTag | 1
4 | rob 4 | cTag | 5
每个团队中都可以包含多个用户,每个用户都可以拥有多个标签。
我需要一个查询,它将提供任何给定团队中的用户列表,以及他们拥有的标签总数。
因此,当我向团队1(dan团队)请求结果时,它应该返回:
-----------------------------------
userID | username | tagTotalValue
-----------------------------------
2 | bob | 3
3 | jon | 1
4 | rob | 5
到目前为止,我有这个查询,但它只给了我一条记录,其中包含整个团队的总体记录,而不是团队中所有用户的总分别列表。
SELECT username, SUM(value) tagTotalValue
FROM users u LEFT JOIN tags t
ON u.userID = t.userID
WHERE u.userID IN (SELECT teamUserID FROM teams WHERE userID = 1)
帮助!
如果有人能够解释如何构建这些查询的好方法,我将非常感谢您的学习。我只需要做一个mySQL课程,还是我可以采用一种简单的方法?
答案 0 :(得分:2)
我需要一个查询,它会在任何给定的团队中提供用户列表, 他们拥有的标签总数。
这似乎与您编写的查询没什么关系。您应该首先将三个表连接在一起然后进行聚合。查询看起来像这样:
SELECT t.teamId, u.userId, u.username, count(ta.userId) as numTags
FROM teams t JOIN
users u
ON t.teamUserID = u.UserId LEFT JOIN
tags ta
ON u.userID = ta.userID
WHERE t.teamId = @teamId -- this can be removed
GROUP BY t.teamId, u.userId, u.username;
此查询突显了teams
有一个标识该小组的列 - 例如teamId
。