显示权限表中的所有数据

时间:2013-07-04 22:32:25

标签: sql-server sql-server-2008

我有2张这样的表:

PermissionsTbl
__________________
PermissionID            int         NotNull
PermissionDescription   nvarchar(100)   NotNull

PermissionID      PermissionDescription 
1             Human Resources
2             Employees Data
3             Departements

ActivePermissionsTbl
________________________
ActivePermID    bigint  NotNull
PermissionID    int NotNull
UserID          int NotNull
PageActive  bit NotNull

ActivePermID    PermissionID    UserID     PageActive        
1           1           1      True
2           2           1      True
3           3           2      True

我想要的是显示数据:

PermissionID      PermissionDescription   PageActive     UserID               
1                 Human Resources         True           1
2                 Employees Data          True           1
3                 Departements                           1
1                 Human Resources                        2
2                 Employees Data                         2
3                 Departements            True           2

我尝试了几种Join方法,但是我失败了<任何建议请。 谢谢。

1 个答案:

答案 0 :(得分:1)

我确信有人可以找到更优雅/更有效的解决方案,但这似乎可以满足您的需求:

SELECT
    a.PermissionID ,
    A.PermissionDescription ,
    ISNULL(ap.PageActive , 0) 'PageActive' ,
    a.UserID
FROM
(
    SELECT DISTINCT
        *
    FROM permissionstbl p
    CROSS JOIN
    (
        SELECT
            userid
        FROM activepermissionstbl
    )
    a
)
a
LEFT JOIN activepermissionstbl ap ON ap.userid = a.userid AND ap.permissionid = a.permissionid
ORDER BY a.userid

因此内部查询获取两个表的笛卡尔积,然后区分它们。然后,对于每个结果,它将在活动权限表中获得适当的权限。

使用左连接,以便任何空结果表示它们当前没有activepermission,因此pageactive值为false。

View Demo Here