如何关联三张弱关联表,按班级等维度查询学生考试成绩
多表关联查询考试成绩并筛选的SQL解决方案
核心关联逻辑
根据你的表结构和关联规则,三张表的关联路径是:
exam_results通过exam_student_id关联exam_students的id字段exam_students通过student_session_id关联student_session的id字段
基础查询SQL语句
SELECT es.student_id, ss.class_id, ss.section_id, ss.session_id, er.exam_subject_id, er.exam AS score FROM exam_results er JOIN exam_students es ON er.exam_student_id = es.id JOIN student_session ss ON es.student_session_id = ss.id -- 按需修改筛选条件 WHERE ss.session_id = 12 AND ss.class_id = 2 AND ss.section_id = 1;
语句说明
- 表别名:给每张表设置短别名(
er对应exam_results,es对应exam_students,ss对应student_session),简化代码书写。 - JOIN操作:使用内连接
JOIN确保只返回三张表中匹配的记录,也就是有考试成绩且关联有效学生会话的记录。 - 筛选条件:在
WHERE子句中通过student_session的字段过滤结果,你可以直接修改session_id、class_id、section_id的数值适配需求。 - 查询字段:选取了学生ID、会话/班级/学段信息、考试科目ID和成绩,可根据需要增减字段(比如添加
es.id或ss.id等)。
扩展场景示例
如果需要包含无考试成绩的学生记录,可将JOIN替换为LEFT JOIN,同时处理空成绩:
SELECT es.student_id, ss.class_id, ss.section_id, ss.session_id, er.exam_subject_id, COALESCE(er.exam, 0) AS score -- 用0替代空成绩 FROM student_session ss JOIN exam_students es ON ss.id = es.student_session_id LEFT JOIN exam_results er ON es.id = er.exam_student_id WHERE ss.session_id = 12 AND ss.class_id = 2 AND ss.section_id = 1;
内容的提问来源于stack exchange,提问作者KasimaEse
相关产品推荐
相关产品推荐

