我正在使用具有以下两个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
这是所有公司中唯一存在的用户 ->对象分配。
基本上,我正在尝试弄清楚哪些用户可以访问所有公司中的对象(然后进行反向以查看哪些用户只能访问某些公司中的对象(
(任何帮助都将受到赞赏!
如果用户可以访问给定对象类型的所有公司,则对象访问表中(UserID
,ObjectID
(组合的记录数将等于公司桌。因此,要获得所有这些组合,我们可以使用:
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)