以下来自临时表的结果 请注意:下面的数据只是一个示例,因此我不需要硬编码查询,我需要一个适用于各种数据的查询。
值= 1表示用户具有角色,0表示用户没有角色。 与第一行类似,测试1具有角色A但不具有角色D.
我需要查询以下案例。
Role ID = ( A,B,C,D )
时的案例#1
我只需要分配了至少一个角色的用户。
我应该回到用户测试1,测试2和测试3.测试4将不会到来,因为没有分配任何角色。
案例#2 Role ID = ( A,B,C,D )
时。
我只需要具有分配给它的所有角色的用户。
我应该让User Testing2有4行。
用户名值角色ID
测试1 1 A
测试1 1 B
测试1 1 C
测试1 0 D
测试2 1 A
测试2 1 B
测试2 1 C
测试2 1 D
测试3 1 A
测试3 1 B
测试3 1 C
测试3 0 D
测试4 0 A
测试4 0 B
测试4 0 C
测试4 0 D
答案 0 :(得分:1)
CASE#1(至少分配了一个角色)
SELECT b.*
FROM
(
SELECT DISTINCT [username], Value
FROM tableName
WHERE value = 1
) a
INNER JOIN TableName b
ON a.username = b.username
WHERE a.value = 1
CASE#2(具有分配给它的所有角色)
SELECT username
FROM tableName
WHERE RoleID IN ('A','B','C','D')
GROUP BY username
HAVING COUNT(DISTINCT roleID) = 4
答案 1 :(得分:0)
要获得最终结果(用户的所有记录),请执行以下查询之一(CASE X)并将其重新加入完整表格,例如:对于案例1:
select t.*
from (
select username
from tbl
where value = 1
group by username) g
join tbl t on t.username = g.username
order by t.username, t.roleid
案例1:至少有一个角色的用户
select username
from tbl
where value = 1
group by username
案例2:拥有所有角色的用户(角色数量未知)
select username
from tbl
where value = 1
group by username
having count(distinct roleid) = (select count(distinct roleid) from tbl)
案例2:拥有所有角色的用户(事先知道的角色数量,例如A,B,C,D => 4)
select username
from tbl
where value = 1
group by username
having count(distinct roleid) = 4