2017-03-17 15 views
0

ユーザのすべての権限を取得するためのクエリが必要です。多対多のリレーションシップのSQLクエリ

  • ユーザーは
    • グループは、0-多くのユーザー
    Aグループでは、0-多くの役割
    • 役割をすることができますすることができ
    • を持つことができます0 - 多くのグループにもすることができます0〜多くのグループに属しているグループ
  • ロールには0つのパーミッションがあります
    • 許可が0-多くの役割

私はユーザーIDを持っていると私はそのユーザーのすべての権限を取得する必要がある上に置くことができます。ですから、私はすべてのグループをユーザーID、ユーザーの各グループのすべての役割、そしてさまざまな役割のすべての権限のために取得する必要があります。

1つの多対多リレーションシップクエリでは問題ありませんが、このネストされたクエリを管理するように見えます。多くのクエリに私の単一多くの

例:使用可能なテーブルを仮定し、その構造が許可-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

あなたの質問は何ですか?このシナリオでは、もう1つのエンティティが必要です.Group_Rolesを作成しましたか? – OctoCode

答えて

0

、あなたはこのようなクエリで欲しいものを達成することができます:

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

あなたはそれらのエンティティから必要なすべてが彼らのID間の結合されているため、実際には、UserGroupRoleテーブルを結合する必要はありません。これはリレーションシップ・テーブルですでに使用可能です。

関連する問題