2015-10-06 135 views
0

我试图使用日历表,但我的查询仍然显示日期间隙在我的记录中,我的内部连接是错误的吗?这里是我的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' 
+1

这不应该是左连接吗? –

+0

以及INNER JOIN在您的查询中? – DarkKnight

+0

我试了左连接,但结果相同。 –

回答

1

你RIGHT JOIN保持每行的attendance表,但在你的cal表中删除不匹配的作用。

你想要一个左加入,所以你可以保持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 
+0

我试了左连接,但结果相同。 –

+0

我在你的查询中遗漏了一些东西。请检查我的编辑。 –

+0

谢谢你的工作..你帮了我很多。 –