该标题不太好,因此请考虑以下事项。我有五个表格:TSQL - 从具有多个连接路径的表中选择
而且我想获得直接链接到它的用户或通过配置文件间接获得的所有权限。在不-相当,有SQL我想出来的,到目前为止是这样的:
SELECT [Pe].[Controller],
[Pe].[Action]
FROM [PermissionSets] AS [PS]
JOIN [UserPermissionSets] AS [UPS]
ON ([UPS].[PermissionSetId] = [PS].[Id])
JOIN [Users] AS [U]
ON ([U].[Id] = [UPS].[UserId])
JOIN [Profiles] AS [P]
ON ([P].[Id] = [U].[ProfileId])
JOIN [ProfilePermissionSets] AS [PPS]
ON ([PPS].[ProfileId] = [P].[Id])
JOIN [Permissions] AS [Pe]
ON ([Pe].[PermissionSetId] = [PS].[Id])
WHERE [U].[Id] = 4;
它返回行的正确计数,但它一遍又一遍地重复控制器或动作,所以它是错的。我希望有人能帮我纠正它,以显示用户的所有不同的权限集。理想情况下,我想也改变它,以便它从用户开始都被发现,因为这是我在我需要做的事情中访问的方法(该对象是一个名为User
的实体框架类,将使用LINQ)。
UPDATED因为我忘了我真的想要的权限不是权限集。
你只是在寻找'GROUP BY'? – ZLK
不知道,我知道足够的SQL来为自己造成问题,哈哈。 – Gup3rSuR4c
用户是否总是在_UserPermissionSets_表中至少有一个条目?如果不是,则只能检索在_UserPermissionSets_或_UserPermissionSets_和_Permissions_中具有条目的用户。那么你应该使用'LEFT OUTER JOIN'。 – schlonzo