如何查询仅包含Maths科目的学生ID?SQL查询求助
检索仅包含Maths科目的学生ID的正确SQL方法
你当前的SQL语句select * from subject where subject in ('Maths')会返回所有选过Maths的学生记录,但这些学生可能同时选修了其他科目,所以无法满足“仅包含Maths”的查询需求。以下是几种可行的正确查询方法:
方法一:分组统计+Having筛选
通过分组统计每个学生的科目数量,同时确认唯一的科目是Maths:
SELECT id FROM subject GROUP BY id HAVING COUNT(DISTINCT subject) = 1 AND MAX(subject) = 'Maths';
COUNT(DISTINCT subject) = 1确保该学生只有1种选修科目MAX(subject) = 'Maths'确认这个唯一的科目就是Maths(用MIN也可以,因为只有一个科目)
方法二:子查询排除法
先筛选出选过Maths的学生ID,再排除掉那些选过其他科目的ID:
SELECT DISTINCT id FROM subject WHERE subject = 'Maths' AND id NOT IN ( SELECT id FROM subject WHERE subject != 'Maths' );
- 内层子查询找出所有选修过非Maths科目的学生ID
- 外层查询保留选过Maths且不在上述子查询结果里的ID,即为仅选Maths的学生
方法三:左连接过滤法
通过左连接匹配学生的其他科目记录,过滤掉存在其他科目的情况:
SELECT s1.id FROM subject s1 LEFT JOIN subject s2 ON s1.id = s2.id AND s2.subject != 'Maths' WHERE s1.subject = 'Maths' AND s2.id IS NULL;
- 左连接后,若学生只有Maths科目,那么s2对应的记录会是NULL
- 通过
s2.id IS NULL筛选出这类学生
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

