Id Name Group Role
=====================================
1 ADMIN_GROUP 2 501
1 ADMIN_GROUP 2 502
1 ADMIN_GROUP 2 503
1 ADMIN_GROUP 2 504
1 ADMIN_GROUP 2 1001
3 OtherGroup 2 501
3 OtherGroup 2 502
3 OtherGroup 2 503
3 OtherGroup 2 1001
我想根据角色获取记录。如上表所示,管理组包含
"501,502,503,504,1001
Role"one_answers"OtherGroup"包含"501,502,503,1001
Role"。在OtherGroup用户选择的情况下,我还想从AdminGroup获取记录,因为admin组包含OtherGroup拥有的所有权限。但是在AdminGroup选择的情况下,不要从其他组获取记录,因为角色504不存在于其他组
我尝试以下查询
SELECT DISTINCT Id,Name FROM Tab1 WHERE 1=1
AND Role IN (Select Role from Tab1 where Id = 3)
由于In查询sql返回的记录来自AdminGroup,我不想
您可以使用自连接做一些事情。下面使用HAVING语句表示"当且仅当每个角色都与id = 3匹配时,则返回结果"。如果每个角色都有匹配,则返回0,否则返回1,过滤MAX为0。
SELECT a.Id,a.Name
FROM tbl AS a
LEFT JOIN tbl AS b
ON a.role = b.role AND b.id = 3
GROUP BY a.Id,a.Name
HAVING MAX(CASE WHEN b.role IS NOT NULL THEN 0 ELSE 1 END) = 0