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

LEFT JOIN表中筛选checktime或pin为NULL值的SQL查询问题

解决LEFT JOIN后NULL值查询无结果的问题

问题根源

SQL里的NULL代表未知值,没法用普通的等于(=)运算符判断。你写的cio.checktime=NULL会直接返回空结果,因为任何值和未知值的比较结果都是未知,不会匹配到任何记录。必须用IS NULL来判断字段是否为NULL。

修改后的SQL语句

要检索cio.checktime或cio.pin为NULL的记录,同时满足emp.status=0,可以用下面的语句:

SELECT emp.`emp_id`, cio.`pin`, cio.`checktime`
FROM payroll.employees AS emp 
LEFT JOIN (
    SELECT * FROM zkteco_biotime.checkinout 
    WHERE checktime > "2022-09-20 23:59:59"
) AS cio ON emp.emp_id = cio.pin
WHERE emp.status=0 
  AND (cio.checktime IS NULL OR cio.pin IS NULL)
GROUP BY emp.emp_id 
ORDER BY cio.checktime DESC;

补充说明

  • 用(cio.checktime IS NULL OR cio.pin IS NULL)来匹配任意一个字段为NULL的情况
  • 注意ORDER BY cio.checktime DESC中,如果checktime是NULL,不同数据库里排序时NULL默认位置可能有差异,一般会排在末尾
  • 部分数据库开启严格模式(比如MySQL的ONLY_FULL_GROUP_BY)时,GROUP BY emp.emp_id可能因为选中的非聚合字段未在GROUP BY中而报错,这时可以根据需求改用聚合函数(比如MAX(cio.checktime))或调整GROUP BY规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:01:13