在CTE和子查询上的左连接不为NULL

时间:2017-02-10 10:24:53

标签: sql sql-server sql-server-2008 sql-server-2012

我试图在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的行。

0 个答案:

没有答案