我有两个表:驱动程序和路由。表驱动程序由驱动程序ID,名称和姓氏组成,表路由由路由ID,驱动程序ID,开始时间和结束时间组成。如何确定在选定时间间隔内(例如5-25-2020 14:00:00和5-29-2020 23:00:00之间)可用的驱动程序?
我想出了这段代码,但是却给了我相反的感觉。它显示给定间隔内已经在路线上的驾驶员的姓名和姓氏
select id, name, surname from driver left join route on driver.id=route.driver_id where 5-25-2020 < route.end_time and 5-29-2020 > route.start_time group by 1;
编辑
| 1 | 名称1 | 姓1
| 2 | 名称2 | 姓2
| 1 | 1 | 2020年5月25日| 2020年5月29日
| 2 | 2 | 2020年5月15日| 2020年5月20日
| 3 | ?| 2020年5月25日| 2020年5月29日
我要问的是如何选择适用于路由ID 3的所有驱动程序。驱动程序1在这段时间内已经在路由上,因此唯一的选择是驱动程序ID2。如何使用sql查询获取该驱动程序?
您可以not exists
用来列出没有计划路线与目标期间重叠的驱动程序:
select d.*
from drivers d
where not exists (
select 1
from routes r
where
r.driver_id = d.driver_id
and r.start_time < '2020-05-29 23:00:00'
and r.end_time > '2020-05-25 14:00:00'
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句