查找通用值的SQL查询将是什么?

时间:2019-04-18 06:34:51

标签: sql sql-server

我有表RoleRights和列RoleIdRightId。 可以说表格的数据如下:

----------------------
| RoleId  | RightId  |
----------------------
| Role1   | Right1   |
| Role2   | Right2   |
| Role3   | Right3   |
| Role2   | Right1   |
----------------------

在两个Rights之间查找公用Roles的查询是什么? 例如。我想找出Role1Role2之间的共同权利。

2 个答案:

答案 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