报告所有具有某些权限但不具有其他权限的角色

时间:2014-09-11 06:21:12

标签: sql sql-server tsql

假设您拥有此角色ID和权限ID表。 我想列出所有具有权限1,2但缺少权限3,4的角色。 角色可以拥有其他权限,这无关紧要。我只关心知道如果角色有权限1,2,角色中缺少权限3,4。因此下面的测试表的结果应该是roleid 3。

我想出了一个有很多“in”和“not in”的解决方案。询问是否有更好的方法。我稍后会发布我的解决方案。我不想改变思考过程。

Declare @test table
(
 roleid int,
 permissionid int
)

insert into @test values(1,1)
insert into @test values(1,2)
insert into @test values(1,3)
insert into @test values(1,4)
insert into @test values(1,5)
insert into @test values(1,8)
insert into @test values(1,9)

insert into @test values(2,1)
insert into @test values(2,2)
insert into @test values(2,3)
insert into @test values(2,4)
insert into @test values(2,10)
insert into @test values(2,7)

insert into @test values(3,1)
insert into @test values(3,2)
insert into @test values(3,11)
insert into @test values(3,18)

insert into @test values(4,18)
insert into @test values(4,3)

1 个答案:

答案 0 :(得分:0)

请查看给定查询是否适合您,

SELECT  ROLEID 
FROM    @TEST A 
WHERE   A.PERMISSIONID IN (1,2) 
AND     ROLEID NOT IN (SELECT ROLEID FROM @TEST WHERE PERMISSIONID IN (3,4) GROUP BY ROLEID)
GROUP   BY ROLEID