我有表RoleRights
和列RoleId
和RightId
。
可以说表格的数据如下:
----------------------
| RoleId | RightId |
----------------------
| Role1 | Right1 |
| Role2 | Right2 |
| Role3 | Right3 |
| Role2 | Right1 |
----------------------
在两个Rights
之间查找公用Roles
的查询是什么?
例如。我想找出Role1
和Role2
之间的共同权利。
答案 0 :(得分:0)
由于您已要求处理n个角色,因此可以使用以下查询来实现。
SELECT right_column
FROM your_table
WHERE role_column IN ('Role1', 'Role2', 'Role3') -- Roles selected
GROUP BY right_column HAVING count(1) = 3 -- total number of roles selected
如果您有重复的角色权利条目,则可以尝试
;with cte as
(
select distinct role_column , right_column
from your_table
where role_column in ('Role1','Role2','Role3')
)
select right_column
from cte
group by right_column
having count(1) = 3
答案 1 :(得分:0)
如果您需要一次检查两个以上的角色(如某些评论中所述),则可以执行此操作
With basedata as
(
Select distinct RoleID, RightID -- ignore duplicates of the same role/right
from YourTable
Where RoleID in ('Role1', 'Role2', 'Role3') --List all roleIDs to check here
)
Select RightID, Count(RoleID) as RCount
From basedata
Group by RightID
Having Count(RoleID) > 1
这将显示至少2个角色的所有权利。如果必须显示所有角色的权利,请将最后一行更改为
Having Count(*) = 3 --set this to number of roles you're checking