HOW TO - SQL连接根据1个公共表映射组合2个表的输出

时间:2014-05-09 02:54:21

标签: sql-server-2008-r2

我有以下表格

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查询以产生此输出?

1 个答案:

答案 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想要获取所有记录,即使它们在两个查询中都具有​​相同的值。