MySQL select 不在特定日期和时间的id
MySQL select id which is not in specific date and time
我有两个 table 的名字 cars
和 booking
。
我想找到的是可供预订的可用汽车,简单来说就是从 cars
选择汽车详细信息,其 ID 在特定日期和时间不在预订 table 中。
预订 table 有列 pick_date(date),drop_date(date),pick_time(time),drop_time(time),car_id(int),booking_id(int) blah blah
。
现在我一直在寻找可用的汽车。请指导我如何在 mysql 中进行操作。以下是 Booking Table 的 4 列。
Pick_Date Drop_Date Pick_Time Drop_Time
---------- ----------- ----------- --------------
2015-01-15 2015-01-15 09:00:00.000000 10:00:00.000000
试试这个:
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
你可以使用 "NOT IN" of MySql.Read 如果仍然需要帮助请评论。
SELECT * FROM cars WHERE cars.id NOT IN (SELECT id FROM booking);
希望此查询对您有所帮助。
您可以使用 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
是您要查找的接送时间。这会检查该期间和预订期间之间是否有任何重叠。它会选择完全没有重叠的汽车。
注意:您应该将日期时间值存储在单个列中,而不是包含日期和时间的两个单独的值。
我有两个 table 的名字 cars
和 booking
。
我想找到的是可供预订的可用汽车,简单来说就是从 cars
选择汽车详细信息,其 ID 在特定日期和时间不在预订 table 中。
预订 table 有列 pick_date(date),drop_date(date),pick_time(time),drop_time(time),car_id(int),booking_id(int) blah blah
。
现在我一直在寻找可用的汽车。请指导我如何在 mysql 中进行操作。以下是 Booking Table 的 4 列。
Pick_Date Drop_Date Pick_Time Drop_Time
---------- ----------- ----------- --------------
2015-01-15 2015-01-15 09:00:00.000000 10:00:00.000000
试试这个:
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
你可以使用 "NOT IN" of MySql.Read 如果仍然需要帮助请评论。
SELECT * FROM cars WHERE cars.id NOT IN (SELECT id FROM booking);
希望此查询对您有所帮助。
您可以使用 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
是您要查找的接送时间。这会检查该期间和预订期间之间是否有任何重叠。它会选择完全没有重叠的汽车。
注意:您应该将日期时间值存储在单个列中,而不是包含日期和时间的两个单独的值。