多个多对多关系的SQL查询

时间:2017-03-17 22:30:44

标签: sql sql-server select many-to-many inner-join

我需要查询帮助以获取用户的所有权限。

  • 用户可以在0多个组中
    • 群组可以拥有0多个用户
  • 一个组可以有0多个角色
    • 角色可以在0多个组中
  • 角色可以拥有0多个权限
    • 权限可以是0多个角色

我有一个用户名,我需要获得该用户的所有权限。因此,我需要为用户ID获取所有组,为用户提供每个组的所有角色,然后获取各种角色的所有权限。

我对单个多对多关系查询很好,但似乎可以管理这个嵌套查询。

我的单个多对多查询示例:

SELECT        [Permission].*
FROM          [Permission] INNER JOIN
              Roles_Permissions ON Permission.PermissionID = Roles_Permissions.PermissionID INNER JOIN
              Role ON Roles_Permissions.RoleID = Role.RoleID
WHERE        (Role.RoleID = 5)

1 个答案:

答案 0 :(得分:0)

假设表可用且其结构遵循permission-role_permissions-role建议的方案,您可以通过以下查询实现所需:

SELECT  p.*
FROM    [Permission] p
JOIN    Roles_Permissions rp
ON      p.PermissionID = rp.PermissionID
JOIN    Group_Roles gr
ON      rp.RoleID = gr.RoleID
JOIN    User_Groups ug
ON      gr.GroupID = ug.GroupID
WHERE   ug.UserID = /*desired UserID*/

实际上您不需要加入UserGroupRole表,因为这些实体所需的只是ID之间的绑定,已经在关系表中提供。