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

SQL关联查询:如何返回含未打卡员工的完整员工列表?

问题分析

你的SQL只能返回已打卡员工的核心原因是:WHERE子句中的ct.clockdate条件过滤掉了无打卡记录的员工。LEFT JOIN后,无匹配打卡记录的员工对应的ct字段全为NULL,而NULL与任何值比较的结果都不成立,导致这部分员工被排除在外。

正确SQL实现

将ct.clockdate的筛选条件从WHERE子句移至LEFT JOIN的ON关联条件中,这样只会关联指定日期的打卡记录,无匹配记录的员工对应字段会保留NULL(即未打卡状态):

SELECT emp.empref
  ,emp.surname
  ,emp.forenames
  ,j.jobpostname
  ,ct.inactual
FROM empdetails emp
INNER JOIN jobposts j ON emp.jobpostref = j.jobpostref
LEFT JOIN clockingtimes ct 
  ON emp.empref = ct.empref
  AND ct.clockdate = '2023-05-02 00:00:00.000' -- 将日期条件移至JOIN关联条件
WHERE emp.deptref = 4
补充优化建议
  • 若存在员工未关联任何职位(jobpostref为NULL)且需要保留这类员工,可将INNER JOIN jobposts改为LEFT JOIN jobposts
  • 若希望未打卡员工的inactual字段显示为空字符串而非NULL,可使用COALESCE(ct.inactual, '')替换原语句中的ct.inactual

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:14:56