我有三个表我想查询单个数据集。 这是我到目前为止所得到的:
SELECT u.Name, r.Description from Users u
JOIN UserRoleMembership m ON m.UserID = u.UserID
JOIN UserRoles r ON r.RoleID = m.RoleID
GROUP BY u.UserID
问题是上面的查询只返回第一个Role。如何在一行中获取User.Name和角色列表?
用户(不同用户)
INSERT into Users (UserID, Name) Values
(0, Me),
(1, Me2);
UserRoles(区别角色和角色描述)
INSERT into Users (RoleID, Description) Values
(0, Everyone),
(1, Users),
(2, Admin);
UserRoleMembership(一个用户可能有多个角色)
INSERT into UserRoleMembership (MembershipID, UserID, RoleID) Values
(0, 0, 0),
(1, 0, 1),
(2, 1, 0),
(3, 1, 2);
答案 0 :(得分:1)
按您要查看的字段分组。在这种情况下,group by u.name, r.description
而不是按用户ID进行分组。
这是MySQL的一个非常方便的功能,我认为这实际上非常混乱。大多数DB甚至不允许此查询。您不应该在您的选择中包含不在组中的字段,除非您以某种方式聚合它们(使用min
或max
左右)。
[edit]
如果您希望每个用户在一行中进行描述,请按用户ID(而不是u.name)进行分组,并使用GROUP_CONCAT(r.Description)来聚合角色。