我有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方法,但是我失败了<任何建议请。 谢谢。
答案 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。