从子查询结果中获取每个子查询结果行的所有表列

时间:2016-01-09 18:28:27

标签: sql sql-server

我有下面的查询,它获取了对特定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

1 个答案:

答案 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