2017-01-31 54 views
0

我有一個使用標準角色,用戶和UserRoleJoin體系結構的應用程序。爲報告功能選擇具有n個角色的用戶SQL

應用程序需要基礎上,他們可能會在什麼組的角色將報告發送給用戶。例如

角色

ID Name 
1 Lead 
2 Mech 
3 Elec 
4 Auditor 
5 Assigner 

UserRole的

UserID RoleID 
1  1 
1  2 
1  4 
2  1 
2  4 

我希望能夠向潛在客戶,機構和審計人員的所有用戶發送一份報告或向所有領導和審計人員提供不同的報告。

的第一份報告將只發送給用戶1,而第二份報告將被髮送到用戶2

我應該有不同的表處理角色介紹協會,或者我應該通過選擇處理這些羣體查詢?

回答

1

有幾種方法。我會傾向於使用group byhaving

select ur.UserId 
from UserRole ur join 
    Role r 
    on ur.RoleID = r.Id 
where name in ('Leads', 'Mech', 'Auditors') 
group by ur.UserId 
having count(*) = 3; 

這種方法的優點是邏輯都在having條款。您可以使其更加靈活,例如所有不是審計員的潛在客戶和機構。

1

如果這些羣體是不夠穩定,他們應該有一個方法來堅持他們在DB,那種Group(ID PK, Name)RoleGroup(GroupID , RoleID)

declare @grpName varchar(50) = 'my_group'; 

select ur.UserId 
from UserRole ur 
join RoleGroup rg on rg.RoleID = ur.RoleID 
join Group g on rg.GroupID = g.ID and g.Name = @grpName 
group by ur.UserId 
having count(*) = (select count(*) n 
        from RoleGroup rg 
        join Group g on rg.GroupId = g.ID and g.Name = @grpName); 
相關問題