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

MySQL如何查询同时选修1000和1001两门课程的学生记录

问题解决方案

错误写法原因

  • 写法1逻辑不成立:WHERE ClassNum = '1000' AND ClassNum = '1001'要求单条选课记录的课程编号同时等于两个不同值,不可能满足,因此无返回结果。
  • 写法2缺少筛选条件:IN仅过滤出选修任意一门目标课程的学生,没有判断是否同时选修两门,因此返回结果范围过大。

实现方案

方案1:返回符合条件学生的完整两条选课记录

先通过子查询定位同时选修两门课的学生ID,再关联查询获取对应选课记录:

SELECT s.StudentID, s.StudentName, r.ClassNum
FROM STUDENT s
INNER JOIN REGISTRATION r ON s.StudentID = r.StudentID
WHERE s.StudentID IN (
    SELECT StudentID
    FROM REGISTRATION
    WHERE ClassNum IN (1000, 1001)
    GROUP BY StudentID
    HAVING COUNT(DISTINCT ClassNum) = 2
)
AND r.ClassNum IN (1000, 1001);

执行结果:

1 | John   | 1000
1 | John   | 1001

方案2:合并输出指定格式

使用MySQL的GROUP_CONCAT函数实现合并输出:

SELECT 
    s.StudentID,
    GROUP_CONCAT(DISTINCT r.ClassNum ORDER BY r.ClassNum SEPARATOR ' & ') AS ClassNum
FROM STUDENT s
INNER JOIN REGISTRATION r ON s.StudentID = r.StudentID
WHERE r.ClassNum IN (1000, 1001)
GROUP BY s.StudentID
HAVING COUNT(DISTINCT r.ClassNum) = 2;

执行结果:

1 | 1000 & 1001

内容的提问来源于stack exchange,提问作者User4u

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:45:05