我有以下表格
UserRights - This table contains extra role selected for the user has been defined.
RoleRights - Default roles defined by the users
UserRole - To map the user and their default role
Roles - Role name (ID = Primary Key)
条件:用户必须是ROLE的一部分,只有在需要时他们才能选择额外的角色。
| UserRights |
|---------------|
| UserID (FK) |
| RoleRights |
|---------------|
| RoleID (FK) |
| UserRole |
|---------------|
| UserID (FK) |
| RoleID (FK) |
现在,考虑是否为特定角色定义了37行 RoleRights , UserRight 表是否为用户为特定用户定义了1行。 UserRole 的映射表具有映射USERID和ROLEID的定义。
我们需要根据UserID构造输出结果为38行,即从= RoleRights 表中获取37行,从 UserRights 表中获取1行。
我们如何构建SQL查询以产生此输出?
答案 0 :(得分:1)
使用UNION
进行此操作最简单,因为它允许您编写2个独立查询。
select UR.UserRightID
from UserRights UR
where UR.UserID = @UserID
union
select RR.RoleRightID
from RoleRights RR
where exists
(select * from UserRole UR1 where UR1.RoleID = RR.RoleID and UR1.UserID = @UserID)
您可以使用UNION ALL
想要获取所有记录,即使它们在两个查询中都具有相同的值。