如何使用日历填补日期空白 table

How to fill date gaps using calendar table

我尝试使用日历 table 但我的查询仍然显示我的记录中存在日期间隔,我的内部联接是否有误?这是我的 mysql 查询:

SELECT c.dt,a.TimeIn,a.LunchOut,a.LunchIn,a.TimeOut FROM cal c 
RIGHT JOIN attendance a ON a.ValidDate = c.dt WHERE c.dt BETWEEN DATE('2015-01-01') 
AND DATE('2015-01-30') AND a.EmpID = '01409159'

您的 RIGHT JOIN 保留了 attendance table 中的每一行,但删除了 cal table.

中的不匹配角色

您需要一个 LEFT JOIN,这样您就可以保留 cal table 中的每一行。此外,您的 a.col = value WHERE 子句将您的 LEFT JOIN 转换为 INNER JOIN。尝试将 a.EmpID 的选择性从 WHERE 子句移动到 ON 子句。

此外,您应该使用 >=< 而不是 BETWEEN 来处理日期范围,因为 BETWEEN 有时会弄乱日期范围的结尾。

SELECT c.dt, 
       a.TimeIn, a.LunchOut, a.LunchIn, a.TimeOut
  FROM cal c 
  LEFT JOIN attendance a ON a.ValidDate = c.dt AND a.EmpID = '01409159'
 WHERE c.dt >= '2015-01-01'
   AND c.dt <  '2015-01-01' + INTERVAL 1 MONTH