You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询仅包含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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:35:30