我有下面的查询,它获取了对特定userId禁用的所有权限的列表来自RolesPermissions表,
SELECT PermissionId
FROM RolesPermissions
WHERE HasPermission = 0
AND RoleId IN (
SELECT RoleId
FROM aspnet_UsersInRoles
WHERE UserId = '3ee38aa9-0e1a-4805-9506-aa47aa38a79c'
)
GROUP BY PermissionId
HAVING Count(PermissionId) = (
SELECT count(RoleId)
FROM aspnet_UsersInRoles
WHERE UserId = '3ee38aa9-0e1a-4805-9506-aa47aa38a79c'
)
上面的查询返回128行,现在我需要针对每个permissionId的所有RoleId,这是通过上面的查询从RolesPermissions表返回
SELECT B.PermissionId
,A.RoleId
FROM RolesPermissions A
INNER JOIN (
SELECT PermissionId
FROM RolesPermissions
WHERE HasPermission = 0 --Get all permissions for user(Duplicates entries)
AND RoleId IN (
SELECT RoleId
FROM aspnet_UsersInRoles
WHERE UserId = '3ee38aa9-0e1a-4805-9506-aa47aa38a79c'
)
GROUP BY PermissionId
HAVING Count(PermissionId) = (
SELECT count(RoleId)
FROM aspnet_UsersInRoles
WHERE UserId = '3ee38aa9-0e1a-4805-9506-aa47aa38a79c'
)
) AS B ON A.PermissionId = B.PermissionId
答案 0 :(得分:1)
试试这个
SELECT B.PermissionId
,A.RoleId
FROM RolesPermissions A
INNER JOIN (
SELECT PermissionId
FROM RolesPermissions
WHERE HasPermission = 0 --Get all permissions for user(Duplicates entries)
AND RoleId IN (
SELECT RoleId
FROM aspnet_UsersInRoles
WHERE UserId = '3ee38aa9-0e1a-4805-9506-aa47aa38a79c'
)
GROUP BY PermissionId
HAVING Count(PermissionId) = (
SELECT count(RoleId)
FROM aspnet_UsersInRoles
WHERE UserId = '3ee38aa9-0e1a-4805-9506-aa47aa38a79c'
)
) AS B ON A.PermissionId = B.PermissionId Where HasPermission = 0
AND A.RoleId IN (
SELECT RoleId
FROM aspnet_UsersInRoles
WHERE UserId = '3ee38aa9-0e1a-4805-9506-aa47aa38a79c'
)
group by B.PermissionId,A.RoleId