假设您拥有此角色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)
答案 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