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

如何关联三张弱关联表,按班级等维度查询学生考试成绩

多表关联查询考试成绩并筛选的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;

语句说明

  1. 表别名:给每张表设置短别名(er对应exam_results,es对应exam_students,ss对应student_session),简化代码书写。
  2. JOIN操作:使用内连接JOIN确保只返回三张表中匹配的记录,也就是有考试成绩且关联有效学生会话的记录。
  3. 筛选条件:在WHERE子句中通过student_session的字段过滤结果,你可以直接修改session_id、class_id、section_id的数值适配需求。
  4. 查询字段:选取了学生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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:24:17