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

SQL关联两表计算课程缴费余额时无缴费记录学生不显示如何解决

问题原因排查
  • 连接类型错误:当前使用INNER JOIN内连接,仅会返回两张表seatno字段匹配的记录,seatno=1006在feetbl中无任何缴费记录,会被直接过滤。
  • 过滤条件位置错误:将缴费日期的范围过滤写在WHERE子句中,左连接后无缴费记录的行缴费日期为NULL,会被条件直接排除。
  • 空值未处理:无缴费记录时SUM(ft.receivedamt)返回NULL,直接计算余额会得到NULL,不符合业务预期。
正确实现方案

替换内连接为左连接,将日期过滤条件移到JOIN的关联条件中,同时用ISNULL处理空值,修正后的SQL如下:

SELECT 
    -- 无缴费记录时jdate返回空,如需默认展示可改为 COALESCE(CONVERT(VARCHAR, ft.receiveddate, 106), '未缴费')
    CONVERT(VARCHAR, ft.receiveddate, 106) AS jdate,
    st.seatno,
    st.sname,
    st.coursename,
    st.scoursefee,
    ISNULL(SUM(ft.receivedamt), 0) AS paid,
    st.scoursefee - ISNULL(SUM(ft.receivedamt), 0) AS balance
FROM 
    studenttbl st
LEFT JOIN 
    feetbl ft ON st.seatno = ft.seatno
    -- 日期过滤移到关联条件中,避免过滤无缴费的学生记录
    AND ft.receiveddate BETWEEN '1990-01-01 00:00:00' AND '2021-10-05 00:00:00'
GROUP BY 
    st.seatno, st.sname, st.coursename, st.scoursefee, ft.receiveddate
ORDER BY 
    st.seatno DESC

执行后结果会包含seatno=1006的记录:jdate为空、paid为0、balance为4500,符合需求。

内容的提问来源于stack exchange,提问作者Vivek Raj Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:06:02