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

MySQL关联查询问题:如何获取完整30天月度考勤日历

解决考勤日历完整展示30天数据的问题

你的问题出在两个核心点:

  • 原SQL用了默认的INNER JOIN,只会返回两张表都有匹配记录的行,员工没打卡的日期直接被排除
  • WHERE attTable.EMPID = '100003'放在WHERE子句里,会把LEFT JOIN后attTable字段为NULL的行(也就是无打卡的日期)过滤掉

正确的做法是以存储完整日期的mycalendar为主表,用LEFT JOIN关联考勤表,并且把员工ID的匹配条件放到JOIN的ON子句中,而非WHERE里。

直接用下面的SQL就能得到包含6月全部30天的考勤数据:

SELECT 
    mc.myday AS 日期,
    at.EMPID AS 员工ID,
    at.TimeIN AS 上班时间,
    at.TimeOUT AS 下班时间 -- 根据你的实际字段调整
FROM mycalendar mc
LEFT JOIN attTable at 
    ON DATE(at.TimeIN) = DATE(mc.myday) 
    AND at.EMPID = '100003'
-- 可选:如果mycalendar里不止6月数据,加上这个条件确保只取2022年6月
WHERE mc.myday >= '2022-06-01' AND mc.myday <= '2022-06-30'
ORDER BY mc.myday;

关键说明:

  • LEFT JOIN以mycalendar为基础,不管员工当天有没有打卡,都会保留所有30天的日期记录
  • 把at.EMPID = '100003'放到ON子句,只会匹配该员工的打卡数据,不会过滤掉无打卡的日期
  • 按mc.myday排序,保证日期按日历顺序展示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:12:37