2017-03-17 1 views
0

사용자에 대한 모든 권한을 얻으려면 쿼리에 대한 도움이 필요합니다.여러 다 대다 관계에 대한 SQL 쿼리

  • 사용자가 될
    • 그룹은 0 - 많은 사용자
  • 그룹이 0 많은 역할
    • 맡은 역할 할 수있을 수 있습니다
    • 을 가질 수 0 많은 그룹에있을 수 있습니다 0- 다수 그룹에 속함
  • 역할에는 0 - 많은 권한이 있습니다.
    • 권한은 0 - 많은 역할

나는 사용자 ID를 가지고 있고 그 사용자에 대한 모든 권한을 얻을 필요에있을 수 있습니다. 따라서 사용자 ID, 모든 사용자에 대한 모든 역할, 그리고 다양한 역할에 대한 모든 권한에 대해 모든 그룹을 가져와야합니다.

나는 하나의 many to many 관계 쿼리를 사용할 수 있지만이 중첩 쿼리를 관리하는 것처럼 보일 수 있습니다. 많은 쿼리 내 단일 많은

예 : 사용할 수있는 테이블을 가정하고 그 구조 권한-role_permissions-역할에 의해 제안 된 계획에 따라

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) 
+0

귀하의 궁금한 점은 무엇입니까? 이 시나리오에서는 하나 이상의 엔티티가 필요하며 Groups_Roles를 만들었습니까? – OctoCode

답변

0

, 당신은 당신이이 같은 쿼리로 원하는 것을 얻을 수 있습니다 : 당신이 그 기관에서 필요로하는 모든이 자신의 ID 사이의 바인딩을하기 때문에

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*/ 

사실 당신은 User, GroupRole 테이블을 조인 할 필요가 없습니다 s가 있으며 관계 테이블에서이 L 사용할 수 있습니다.