我有两个名为cars
和booking
的表格。
我想找到的是可用的预订车辆,简单的是从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
答案 0 :(得分:1)
您可以使用left join
或not in
或not 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);
希望此查询能为您提供帮助。