需要SQL帮助返回动态数据集

时间:2011-06-04 02:02:43

标签: mysql

我有三个表我想查询单个数据集。 这是我到目前为止所得到的:

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);

1 个答案:

答案 0 :(得分:1)

按您要查看的字段分组。在这种情况下,group by u.name, r.description而不是按用户ID进行分组。

这是MySQL的一个非常方便的功能,我认为这实际上非常混乱。大多数DB甚至不允许此查询。您不应该在您的选择中包含不在组中的字段,除非您以某种方式聚合它们(使用minmax左右)。

[edit]

如果您希望每个用户在一行中进行描述,请按用户ID(而不是u.name)进行分组,并使用GROUP_CONCAT(r.Description)来聚合角色。