我有两个表,一个叫ATTENDANCE,另一个叫DATES。
在ATTENDANCE
我有这样的行:
Name | when | Entry | Exit
-----+------------+-------+------
Bob | 2019-01-02 | 08:00 | 16:00
Bob | 2019-01-04 | 09:00 | 17:00
Bob | 2019-01-05 | 07:00 | 13:00
在DATES
桌子上
DATE
----------
2019-01-01
2019-01-02
2019-01-03
...
我需要的是这样的报告,当为一月选择Bob时:
date | entry | exit
-----------+-------+-----
2019-01-01 | null | null
2019-01-02 | 08:00 | 16:00
2019-01-03 | null | null
2019-01-04 | 09:00 | 17:00
2019-01-05 | null | null
2019-01-06 | 07:00 | 13:00
2019-01-05 | null | null
...
我试过这样的左联接:
select date, entry, exit
from DATES
left join ATTENDANCE on date = when
where name = 'Bob'
and month(date) = (select month('2019-01-01'))
但是我只有这个:
2019-01-02 | 08:00 | 16:00
2019-01-04 | 09:00 | 17:00
2019-01-05 | 07:00 | 13:00
可以请人帮我吗?
谢谢问候
你近了 您只需要将第二个表上的过滤移至以下on
条件:
select d.date, a.entry, a.exit
from DATES d left join
ATTENDANCE a
on d.date = a.when and a.name = 'Bob'
where MONTH(d.date) = MONTH('2019-01-01') and
YEAR(d.date) = YEAR('2019-01-01')
笔记:
更好的写日期条件的方法是:
where d.date >= '2019-01-01' and
d.date < '2019-01-01' + interval 1 month
这样比较好,因为优化器可以在索引可用的情况下使用on date
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句