我试图在CTE和子查询之间进行左连接,其中我应该获得用户/角色没有的权限的空值。期望是在某些User字段中返回null。
WITH CTE
([APP_Permission_Name])
AS
(SELECT DISTINCT UP.[APP_Permission_Name]
FROM [ADMINS].[APP_ROLE_PERMISSION] URP
INNER JOIN [ADMINS].[APP_ROLE] UR ON URP.[APP_Role_ID]=UR.[APP_Role_ID]
INNER JOIN [ADMINS].[APP_PERMISSION] UP ON URP.[APP_Permission_Id]=UP.[APP_Permission_Id])
SELECT DISTINCT CTE.[APP_Permission_Name], a.[APP_Computer_User_Id]
FROM CTE
LEFT OUTER JOIN (SELECT DISTINCT [APP_Permission_Name], UU.[APP_Computer_User_Id]
FROM [ADMINS].[APP_USER] UU
INNER JOIN [ADMINS].[APP_USER_ROLE] UUR ON UU.[APP_User_Id]=UUR.[APP_User_Id]
INNER JOIN [ADMINS].[APP_ROLE_PERMISSION] RP ON UUR.[APP_Role_ID]=RP.[APP_Role_ID]
INNER JOIN [ADMINS].[APP_ROLE] UR ON RP.[APP_Role_ID]=UR.[APP_Role_ID]
INNER JOIN [ADMINS].[APP_PERMISSION] UP ON RP.[APP_Permission_Id]=UP.[APP_Permission_Id])a
ON CTE.[APP_Permission_Name]=a.[APP_Permission_Name]
--ORDER BY a.[APP_Computer_User_Id]
结果看起来像这样:
[APP_Permission_Name] [APP_Computer_User_Id] 管理 - 读取用户1 更正 - 读取用户1 维护 - 读取用户1 MasterData-Read User1 付款 - 读取用户1 对帐 - 读取用户1
查询应该输出用户将导致null的行。