选择不在日期之间的行(预订)

时间:2014-06-23 22:18:08

标签: mysql date join

我有一个租车脚本。我把汽车放在汽车桌上。我将所有预订信息保存在预订表中。预订表包含from和until日期字段以及car_id字段。

例如:car_id:14,from =“2014-06-24”,直到=“2014-07-24”。

我正在尝试编写一个查询来获取在给定日期之间保留的所有汽车。我尝试了一些技巧,比如内连接而不存在等等。

所以,说我想在日期“2014-06-24”和“2014-08-24”之间获取可用的汽车。

为了简化目的以明确我的问题:使用此查询选择保留汽车不起作用:

SELECT * FROM reservation WHERE from >= '2014-06-24' AND until <= '2014-08-24'

因为汽车可能会从“2014-06-30”预订到“2014-09-15”。由于直到日期不大于或等于查询中的日期,因此汽车不会显示为保留。

我希望你能理解我的观点。提前谢谢。

由于Marc B的回答,我找到了我正在寻找的查询:

SELECT * FROM cars WHERE NOT EXISTS (
SELECT * FROM reservation WHERE cars.id = reservation.car_id AND until >= '2014-06-24' AND from <= '2014-08-24')

1 个答案:

答案 0 :(得分:1)

考虑以下情况。你已经预订了你已经预约的日期A和B,以及你想要预订的两个日期,P和Q.这意味着以下条件可以成立:<​​/ p>

A B P Q    date comes AFTER 'already booked'
A P B Q  * dates overlap
A P Q B  * dates are entirely overlapped
P A Q B  * dates overlap
P Q A B    date comes BEFORE 'already booked'

*的条目是您感兴趣的条目,一旦您将所有比较和逻辑缩小,您最终会得到

P <= B && Q >= A