如何使用SQL从两张关联表中查询得到所需的目标结果
SQL查询实现方案
实现逻辑
普通JOIN无法输出预期结果的核心原因是:成绩表Table2中不存在Rakesh对应Math科目的行,直接关联会丢失该科目记录。正确逻辑是先以全量科目为基准,关联指定学生的成绩数据,空缺成绩填充为0即可。
可用查询代码
SELECT t1.SubjectName AS Subject, 'Rakesh' AS StudentName, COALESCE(t2.Marks, 0) AS Marks FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.SubjectId = t2.SubjectId AND t2.StudentName = 'Rakesh' ORDER BY t1.SubjectId;
代码说明
- 以科目表Table1为查询基础,保证所有科目都出现在结果中
- LEFT JOIN关联条件额外限定学生为Rakesh,只会匹配该学生的成绩记录,其他学生的成绩数据不会干扰结果
- COALESCE函数用于将左连接产生的空成绩值替换为0,满足缺考记0的要求。如果使用MySQL数据库,也可以替换为
IFNULL(t2.Marks, 0),效果一致。
内容的提问来源于stack exchange,提问作者Sourav Mahajan
相关产品推荐
相关产品推荐

