从sql server的同一表中取出匹配的记录

  • 本文关键字:记录 sql server sql sql-server
  • 更新时间 :
  • 英文 :

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,1001Role"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

相关内容

  • 没有找到相关文章

最新更新