我正忙着搞清楚我需要的SQL查询.
我有一个项目,为用户提供工作室级用户角色,每个项目都有项目级角色,覆盖/覆盖工作室级角色.所有角色都在工作室级别定义,但在项目级别仅定义了一些角色(主要是具有与其对应的工作室级别角色不同的值的角色)
g_studio_UsersInRole
userId roleId value
1 1 TRUE
1 2 TRUE
1 3 TRUE
2 1 FALSE
Run Code Online (Sandbox Code Playgroud)
g_project_UsersInRole
userId roleId value projectId
1 2 FALSE 1
2 1 TRUE 1
Run Code Online (Sandbox Code Playgroud)
我需要一个查询,它将项目角色覆盖在给定项目ID的工作室角色上.棘手的部分是避免重复的工作室级角色.我需要项目级角色(如果有的话)来支配.
我一直在玩Unions,但我无法弄清楚如何避免重复.
基本上我需要以下结果:
userId roleId value
1 1 TRUE
1 2 FALSE
1 3 TRUE
2 1 TRUE
Run Code Online (Sandbox Code Playgroud)
哪里
如项目层面所示
我以为我接近这个查询,但重复仍然存在:
;With roles As
(
SELECT UserId, Value, RoleId
FROM dbo.g_project_UsersInRole
WHERE (ProjectId = 1)
UNION
SELECT UserId, Value, RoleId
FROM dbo.g_studio_UsersInRole)
SELECT roles.RoleId, Value, UserId
FROM …Run Code Online (Sandbox Code Playgroud)