Sql 基于将一个视图中的值列表与另一个视图中的值列表进行比较返回表

Sql 基于将一个视图中的值列表与另一个视图中的值列表进行比较返回表,sql,sql-server,count,inner-join,relational-division,Sql,Sql Server,Count,Inner Join,Relational Division,我有两个SQL视图,它们公开与实体/分类对相关的数据,另一个视图公开用户分类对 为了让用户拥有访问实体的权限,用户必须拥有分配给该实体的所有类别。因此: EntityID ClassificationID 1 1 1 2 2 1 2 2 2 3 UserID ClassificationID 100 1 100

我有两个SQL视图,它们公开与实体/分类对相关的数据,另一个视图公开用户分类对

为了让用户拥有访问实体的权限,用户必须拥有分配给该实体的所有类别。因此:

EntityID      ClassificationID
1             1
1             2
2             1
2             2
2             3


UserID        ClassificationID
100           1
100           2
100           4
101           1
101           2
101           3 
在上述场景中,用户100可以访问实体ID 1,但用户101可以访问实体ID 1和实体ID 2

我希望能够在这样一个表中返回这些数据,基本上是一个完整的有权访问这些数据的权利和用户列表:

UserID      EntityID
100         1
101         1
101         2     

实现这一目标的最佳和最有效的方法是什么。我正在使用SQL Server 2019

这是一个关系划分问题。我建议使用join将用户和实体关联起来,然后进行聚合,并使用
have
子句进行过滤,以仅保留“完整”组

假设这些表被称为
实体
用户

select u.userid, e.entityid
from entities e
inner join users u on u.classificationid = e.classificationid
group by u.userid, e.entityid
having count(*) = (select count(*) from entities e1 where e1.entityid = e.entityid)

userid | entityid -----: | -------: 100 | 1 101 | 1 101 | 2 userid | entityid -----: | -------: 100 | 1 101 | 1 101 | 2