如何查询成员恰好为指定列表的球队?需保留现有JOIN关联
问题分析
原SQL仅能筛选出至少包含Bob、James、Sam三名球员的球队,无法排除同时包含额外球员的球队(如测试数据中的Green Team),也无法过滤球员数量不足3人的球队(如Blue Team),达不到完全精确匹配的要求。
修正后SQL
SELECT t.name FROM teams t LEFT JOIN members m ON t.name = m.team_name LEFT JOIN players p ON m.player_name = p.name GROUP BY t.name HAVING -- 校验目标列表的3名球员全部在队中,无遗漏 COUNT(DISTINCT CASE WHEN m.player_name IN ('Bob', 'James', 'Sam') THEN m.player_name END) = 3 -- 校验球队总球员数恰好为3,无额外成员 AND COUNT(DISTINCT m.player_name) = 3;
实现说明
- 完全保留了原查询的所有JOIN关联,没有仅查询
members表,符合需求限制 - 按球队名称分组后对成员属性做双重校验:
- 第一个计数条件确保三名目标球员都在当前球队中,没有缺失
- 第二个计数条件确保球队没有目标列表之外的其他球员
- 两个条件同时满足即可精准匹配到成员和目标列表完全一致的
Red Team
内容的提问来源于stack exchange,提问作者Zoey Malkov
相关产品推荐
相关产品推荐

