OK. , :
- , NO UserPrivilege RolePrivilege.
- , UserPrivilege RolePrivilege.
3 , .
SubQuery1: UserPrivileges
, :
SELECT * FROM [dbo].[privilege_mapping] WHERE user_id IS NOT NULL
SubQuery2: RolePrivileges
ROLE, :
SELECT * FROM [dbo].[privilege_mapping] WHERE user_id IS NULL
: COALESCE()
, OR ( , ), COALESCE(). ( ) :
SELECT module_id, url, privilege=COALESCE(UP.privilege,RP.privilege), module_name
FROM [dbo].[UserProfile] U
LEFT OUTER JOIN (SELECT * FROM [dbo].[privilege_mapping] WHERE user_id IS NOT NULL) UP ON UP.user_id = U.id
LEFT OUTER JOIN (SELECT * FROM [dbo].[privilege_mapping] WHERE user_id IS NULL) RP ON RP.role_id = U.role_id
LEFT OUTER JOIN [dbo].[module] M ON COALESCE(UP.module_id,RP.module_id)=M.id
WHERE U.id = @userID AND M.id IS NOT NULL
?
. , , "". , role_id, . - , , .
?
OK. , , . , where, NULL module_id (, WHERE module_id IS NOT NULL).
, , , LEFT OUTER JOIN, ( INNER JOIN, ).
. , , .