我尝试使用日历表,但我的查询仍然显示我的记录中的日期空白,我的内部联接是否错误?这是我的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'
答案 0 :(得分:1)
您的RIGHT JOIN会保留attendance
表格中的每一行,但会在您的cal
表格中删除不匹配的角色。
您想要LEFT JOIN,因此您可以保留cal
表中的每一行。此外,您的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