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

SQL查询无匹配行时如何返回用户信息并将总分数设为默认值0

问题核心原因

原SQL存在三处核心问题导致无成绩的用户无法返回预期结果:

  1. 关联逻辑错误,未正确引入CourseMarks表就直接在JOIN条件中使用该表字段,同时错误使用内连接,会直接过滤掉无匹配成绩的用户
  2. 将CourseMarks表的过滤条件放在WHERE子句中,进一步过滤了无成绩的用户记录
  3. 未处理空值,无成绩时SUM聚合结果为NULL,不会自动转为0

修正后的SQL语句

SELECT
    User.Name AS UserName,
    User.Id AS UserId,
    CourseMarks.Id AS CourseId,
    COALESCE(SUM(CourseMarks.Marks), 0) AS "Total marks"
FROM
    User
LEFT JOIN 
    CourseMarks ON User.Id = CourseMarks.User_Id AND CourseMarks.User_Id = 2
-- 若需要关联Tutors表请使用以下正确关联逻辑,原SQL关联条件有误
-- LEFT JOIN Tutors ON User.TutorId = Tutors.Id
WHERE
    User.Id = 2
GROUP BY 
    User.Id, User.Name, CourseMarks.Id

如果不需要展示CourseId,可去掉SELECT和GROUP BY中的CourseMarks.Id字段,无成绩时只会返回一行Total marks为0的记录,完全符合预期。如果需要查询全量用户的成绩数据,去掉WHERE子句的User.Id = 2过滤,以及LEFT JOIN ON中的CourseMarks.User_Id = 2条件即可。

关键修改说明

  • 改用LEFT JOIN关联CourseMarks表,保留User表的所有符合条件的记录,哪怕右表没有匹配的成绩数据
  • 将CourseMarks.User_Id = 2的过滤条件移到LEFT JOIN的ON子句中,避免无成绩的用户被过滤
  • 用COALESCE函数处理SUM的结果,无成绩时SUM返回的NULL会被转为默认值0
  • 修正了原SQL中Tutors表的错误关联逻辑,如需用到Tutors表字段可使用注释中的正确关联写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:48:02