如何修改SQL查询,基于Subject模型常量获取学生全部科目数据?
解决思路与修改方案
问题根源
原查询中的WHERE sub.[name] = Subject.ENGLISH是精准过滤条件,只返回科目值等于英语的记录,因此只能获取到ENGLISH科目数据。
修改方案
方案1:获取学生所有关联科目数据
直接移除WHERE子句,让INNER JOIN返回每个学生对应的所有科目记录:
SELECT s.name, s.school, s.grade, sub.[name] as sub_name FROM student s INNER JOIN subject sub ON s.id = sub.student_id;
方案2:仅获取指定的5类科目数据
如果需要严格限定为Subject类中定义的ENGLISH、MATHS、CHEMISTRY、ART、MUSIC这五个科目,使用IN子句匹配多个目标值:
SELECT s.name, s.school, s.grade, sub.[name] as sub_name FROM student s INNER JOIN subject sub ON s.id = sub.student_id WHERE sub.[name] IN (Subject.ENGLISH, Subject.MATHS, Subject.CHEMISTRY, Subject.ART, Subject.MUSIC);
思路说明
- 移除WHERE条件:解除单一科目的过滤限制,让关联查询返回所有学生-科目的对应记录。
- 使用IN子句:在需要限定科目范围时,一次性匹配多个目标常量值,确保结果仅包含指定的五类科目数据。
内容的提问来源于stack exchange,提问作者xNova
相关产品推荐
相关产品推荐

