MySQL选择不在特定日期和时间的id

时间:2015-01-16 11:24:34

标签: mysql sql date datetime select

我有两个名为carsbooking的表格。 我想找到的是可用的预订车辆,简单的是从cars中选择车辆详细信息,其ID不在特定日期和时间的预订表中。

预订表格中有pick_date(date),drop_date(date),pick_time(time),drop_time(time),car_id(int),booking_id(int) blah blah列。

现在我被困在获得可用的汽车。请你指导我如何在mysql中做到这一点。以下是预订表中的4列。

Pick_Date   Drop_Date    Pick_Time        Drop_Time
----------  -----------  -----------      --------------
2015-01-15  2015-01-15   09:00:00.000000  10:00:00.000000

3 个答案:

答案 0 :(得分:1)

您可以使用left joinnot innot exists执行此操作。 left join看起来像

select c.*
from cars c left join
     bookings b
     on c.car_id = b.car_id and
        @pickdt <= addtime(drop_date, drop_time) and
        @dropdt >= addtime(pick_date, pick_time)
where b.car_id is null;

变量@pickdt@dropdt是您要查找的上下次数。这将检查该期间与预订期间之间的任何重叠。它选择的汽车完全没有重叠。

注意:您应该将日期时间值存储在一个列中,而不是将两个单独的值存储在日期和时间中。

答案 1 :(得分:0)

试试这个:

SELECT c.car_id
FROM cars c 
LEFT JOIN ( SELECT car_id 
            FROM bookings 
            WHERE '2015-01-15 11:00:00' BETWEEN CAST(CONCAT(Pick_Date, ' ', Pick_Time) AS DATETIME) AND CAST(CONCAT(Drop_Date, ' ', Drop_Time) AS DATETIME) 
          ) AS A ON c.car_id = A.car_id 
WHERE A.car_id IS NULL

答案 2 :(得分:0)

如果仍然需要帮助,可以使用MySql.Read的“NOT IN”,请发表评论。

SELECT * FROM cars WHERE cars.id NOT IN (SELECT id FROM booking);

希望此查询能为您提供帮助。