如何检查集合是否是另一个集合的子集

时间:2017-02-06 19:54:53

标签: sql sql-server ssis

这是我的SQL问题。我有2张桌子:
用户表:

[UserID]   [Access]  
Abe        A
Abe        B
Brad       C
Cathy      A

角色查找表:

[Role]      [Access]
Admin       A
Admin       B
ReadOnly    C

我需要检查用户是否拥有角​​色的所有访问权限,并最终得到如下表格:

[UserID]   [Role}
Abe        Admin
Brad       ReadOnly
Cathy      None

此外,用户可以拥有多个角色,只要它具有这些角色的所有访问权限。

有人能指出方向吗?向我展示逻辑或基本方法将足够有用。我需要在T-SQL中编写代码。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以获取用户有权访问的所有角色:

select u.userid, r.role
from users u join
     roles r
     on u.access = r.access
group by u.userid, r.role
having count(*) = (select count(*) from roles r2 where r2.role = r.role);