仅在源表中存在来自另一个表的每个迭代的情况下,返回结果



我正在使用具有以下两个Microsoft SQL表的应用程序:

Object Access
    UserID
    CompanyID
    ObjectID

Company
    CompanyID

对象访问表保留所有用户 ->公司 ->对象访问组合,公司表保留了公司列表。用户可以访问多个公司中的对象。公司表和公司ID领域的访问表之间有一个FK。

因此样本数据看起来像:

Object Access
    UserID    CompanyID    ObjectID
    Bob       ABC          Acct
    Bob       DEF          Acct
    Bob       ABC          Vend
    Dan       ABC          Acct

Company
    CompanyID
    ABC
    DEF

我正在寻找一个查询,该查询仅返回用户在所有公司中都可以访问对象的结果

因此,以上数据的结果是:

UserID    ObjectID
Bob       Acct

这是所有公司中唯一存在的用户 ->对象分配。

基本上,我正在尝试弄清楚哪些用户可以访问所有公司中的对象(然后进行反向以查看哪些用户只能访问某些公司中的对象(

(

任何帮助都将受到赞赏!

如果用户可以访问给定对象类型的所有公司,则对象访问表中(UserIDObjectID(组合的记录数将等于公司桌。因此,要获得所有这些组合,我们可以使用:

SELECT USERID, OBJECTID FROM OBJECTACCESS
GROUP BY USERID, OBJECTID
HAVING COUNT(DISTINCT COMPANYID) = (SELECT COUNT(*) FROM COMPANY);
Select
    a.*,
    (select count(*) from company) as company_cnt
from
    object_access a
where
    company_cnt = (select count(*) from object_access b where b.UserID = a.UserID and b.ObjectID = :p_object_id)