該標題不太好,因此請考慮以下事項。我有五個表格: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