Left Join查询返回Null而非0的问题解决求助
解决SQL统计id被引用次数的问题
问题分析
你的原SQL存在三个核心问题:
- 使用
SELECT *会返回重复的To列(原表的To和子查询的to),导致结果里的To列数据混乱 - 子查询的
count(*)未指定别名,结果列名不符合预期 - 未被引用的id对应的统计值为
null,未转换为预期的0
修改后的SQL语句
SELECT s.id, s.Name, s.To, COALESCE(j.ref_count, 0) AS Count FROM sample s LEFT JOIN ( SELECT "to", COUNT(*) AS ref_count FROM sample WHERE "to" != 0 -- 可选:若To=0不算有效引用则添加此条件 GROUP BY "to" ) j ON j."to" = s.id;
关键修改说明
- 明确指定返回列:放弃
SELECT *,直接选择原表的id、Name、To,避免重复列造成的数据错误 - 给统计值加别名:子查询中给
COUNT(*)命名为ref_count,方便主查询清晰引用 - 处理空值:用
COALESCE(j.ref_count, 0)将未被引用时的null转换为0,匹配预期结果要求 - 过滤无效引用(可选):如果
To=0代表无目标引用,可在子查询中添加WHERE "to" != 0,避免统计0的情况
执行结果验证
运行修改后的语句,会得到你预期的结果:
id, Name, To, Count 1, A, 2, 1 2, B, 0, 2 3, C, 2, 0 4, D, 0, 0 5, E, 1, 0
内容的提问来源于stack exchange,提问作者lostDeveloper
相关产品推荐
相关产品推荐

