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

SQL查询学生成绩问题:未录入成绩需显示NULL

问题解决:查询学生选课成绩(未录入时显示NULL)

问题根源

你的SQL语句存在两个核心问题:

  1. 内连接scores表:使用JOIN scores属于内连接,只有scores表存在对应记录时才会返回结果,直接过滤掉了无成绩的课程记录。
  2. 关联字段错误+连接逻辑混乱:RIGHT JOIN courses中错误使用了scores.course(实际字段为scores.course_code),且整体未以学生的选课记录(krs_detail)为核心,导致无成绩时无法返回完整选课列表。

修正后的SQL语句

以学生的选课详情表krs_detail作为主表,关联学生、课程信息后,通过左连接scores表保留所有选课记录,无成绩时自动填充score为NULL:

SELECT 
    s.nim, 
    s.name, 
    kd.course_code, 
    c.course_name, 
    c.sks, 
    sc.score
FROM krs_detail kd
JOIN krs kr ON kr.code_krs = kd.code_krs
JOIN students s ON s.nim = kr.nim
JOIN courses c ON c.course_code = kd.course_code
LEFT JOIN scores sc 
    ON sc.nim = s.nim 
    AND sc.course_code = kd.course_code
    AND sc.academic_year = kr.academic_year -- 匹配对应选课学年的成绩
WHERE kd.code_krs = '2161206003-20211';

逻辑说明

  1. 从krs_detail出发,关联krs表获取对应学生的nim和选课学年academic_year。
  2. 关联students、courses表分别获取学生基本信息和课程详情。
  3. LEFT JOIN scores确保所有选课记录都会被返回,即使scores表中无对应成绩,score字段也会显示NULL。
  4. 增加sc.academic_year = kr.academic_year的关联条件,避免匹配到跨学年的错误成绩。

验证效果

替换code_krs为任意值时:

  • 成绩已录入:score字段显示对应分数;
  • 成绩未录入:score字段显示NULL,同时保留完整的选课课程信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:01:06