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

MySQL两张关联表查询统计右表NULL值行数的实现方法

核心问题排查

你的查询存在3处关键错误:

  • 关联顺序颠倒:以业务表kehadiran左连日历表calendar,业务表本身不存在的日期不会出现在关联结果中,自然无法统计到对应NULL值
  • 关联条件逻辑错误:ON c.datefield = k.keter属于字段错配,应该用日历表的日期字段关联业务表的日期字段tgl
  • 统计逻辑错误:SUM(k.keter)是对字段值求和,NULL值参与求和的结果本身就是NULL,你需要统计的是keter为NULL的行数,而非字段值之和

正确统计语句

写法1:直接统计NULL行数

SELECT COUNT(*) AS null_count
FROM calendar c
LEFT JOIN kehadiran k 
  ON c.datefield = k.tgl 
  AND k.id_kar = '110101'
WHERE c.datefield BETWEEN '2021-08-01' AND '2021-08-15'
  AND k.keter IS NULL;

注意:id_kar的过滤条件必须写在JOIN的ON子句中,不能写在WHERE里,否则左连接会转为内连接,直接过滤掉所有没有匹配到业务数据的行。

写法2:用SUM实现统计(和你原写法逻辑更贴近)

SELECT SUM(IF(k.keter IS NULL, 1, 0)) AS null_count
FROM calendar c
LEFT JOIN kehadiran k 
  ON c.datefield = k.tgl 
  AND k.id_kar = '110101'
WHERE c.datefield BETWEEN '2021-08-01' AND '2021-08-15';

上述两种写法返回的结果都是你预期的10:15天的统计范围里,有匹配数据的共5天,剩余10天对应keter为NULL。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:48:04