2017-02-07 57 views
0

這裏是輸出用戶權限的查詢。我想輸出用戶帳號沒有的權限

SELECT DISTINCT 
    [APP_Computer_User_Id], 
    [APP_Role_Name], 
    [APP_Permission_Name] 
FROM [ADMINS].[APP_USER] U 
INNER JOIN [ADMINS].[APP_USER_ROLE] UR ON U.[APP_User_Id]=UR.[APP_User_Id] 
INNER JOIN [ADMINS].[APP_ROLE] URO ON UR.[APP_Role_ID]=URO.[APP_Role_ID] 
INNER JOIN [ADMINS].[APP_ROLE_PERMISSION] RP ON RP.[APP_Role_ID]=UR.[APP_Role_ID] 
INNER JOIN [ADMINS].[APP_PERMISSION] P ON RP.[APP_Permission_Id]=P.[APP_Permission_Id] 

我試過左外連接,子查詢和其他幾個步驟,但無濟於事。

回答

0

您可以使用交叉連接生成所有用戶和權限值。然後你可以使用left join(或not existsnot in),以過濾掉已經存在的那些:

SELECT DISTINCT [APP_Computer_User_Id], [APP_Permission_Name] 
FROM [ADMINS].[APP_USER] U CROSS JOIN 
    [ADMINS].[APP_PERMISSION] P LEFT JOIN 
    [ADMINS].[APP_USER_ROLE] UR 
    ON U.[APP_User_Id] = UR.[APP_User_Id] LEFT JOIN 
    [ADMINS].[APP_ROLE] URO 
    ON UR.[APP_Role_ID] = URO.[APP_Role_ID] LEFT JOIN 
    [ADMINS].[APP_ROLE_PERMISSION] RP 
    ON RP.[APP_Role_ID] = UR.[APP_Role_ID] AND 
     RP.[APP_Permission_Id] = P.[APP_Permission_Id] 
WHERE P.[APP_Permission_Id] IS NULL; 
0
Select 
appUser.[APP_Computer_User_Id] 
[APP_Role_Name], 
[APP_Permission_Name] 
from [ADMINS].[APP_USER] appUser, [ADMINS].[APP_USER_ROLE] UR 

JOIN [ADMINS].[APP_ROLE] URO ON UR.[APP_Role_ID]=URO.[APP_Role_ID] 
INNER JOIN [ADMINS].[APP_ROLE_PERMISSION] RP ON RP.[APP_Role_ID]=UR. [APP_Role_ID] 
INNER JOIN [ADMINS].[APP_PERMISSION] P ON RP.[APP_Permission_Id]=P. [APP_Permission_Id] 
Left join (select [APP_User_Id] from [ADMINS].[APP_USER] uu where p. [APP_User_Id] = uu.[APP_User_Id]) U ON U.[APP_User_Id]=UR.[APP_User_Id] 

where U.[APP_User_Id] is null 
相關問題