我正在使用具有以下两个Microsoft SQL表的应用程序:
[1] gmp_0.5-13.1 xts_0.10-1 MTS_0.33 zoo_1.8-1
[5] tseries_0.10-42 forecast_8.2 gridExtra_2.3 magrittr_1.5
[9] readr_1.1.1 ggplot2_2.2.1 bindrcpp_0.2 data.table_1.10.4-3
[13] stringr_1.2.0 tidyr_0.7.2 dplyr_0.7.4
对象访问表包含所有用户 - >公司 - >对象访问组合,公司表包含公司列表。用户可以访问多个公司中的对象。 CompanyID字段上的Companies表和Access表之间有一个FK。
示例数据如下所示:
Object Access
UserID
CompanyID
ObjectID
Company
CompanyID
我正在寻找一个只返回用户有权访问所有公司中对象的结果的查询。
因此上述数据的结果将是:
Object Access
UserID CompanyID ObjectID
Bob ABC Acct
Bob DEF Acct
Bob ABC Vend
Dan ABC Acct
Company
CompanyID
ABC
DEF
因为这是唯一的用户 - >所有公司都存在的对象分配。
基本上我试图弄清楚哪些用户可以访问所有公司中的对象(然后反过来查看哪些用户只能访问某些公司中的对象)
感谢任何帮助!
答案 0 :(得分:2)
如果用户有权访问给定对象类型的所有公司,那么对象访问表中(UserID
,ObjectID
)组合的记录数将等于公司数量公司表。因此,要获得所有这些组合,我们可以使用:
SELECT USERID, OBJECTID FROM OBJECTACCESS
GROUP BY USERID, OBJECTID
HAVING COUNT(DISTINCT COMPANYID) = (SELECT COUNT(*) FROM COMPANY);
答案 1 :(得分:0)
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)