2016-04-27 3 views
2

Я пытаюсь вернуть список транспортных средств, где я знаю, что они еще не зарезервированы для текущего диапазона дат. У меня есть tblVehicles стол:MYSQL date compare query

ID  Name 
1  BMW 
2  Merc 
3  Land Rover 
4  Hummer 
5  Convertable 

У меня также есть таблица (tblDiary), который содержит все даты, что транспортное средство используется:

ID  VehicleId  startDate  endDate 
1  1    2016-06-20 2016-06-22 
2  1    2016-06-24 2016-06-24 
3  2    2016-05-01 2016-06-05 

Так что я пытаюсь написать запрос, где я хотите найти автомобили, которые доступны между 2016-06-21 & 2016-06-23. Таким образом, в этом случае желаемым результатом будет:

ID  Name 
2  Merc 
3  Land Rover 
4  Hummer 
5  Convertable 

Какой самый эффективный способ сделать это?

ответ

1
SELECT * 
FROM tblVehicles v 
WHERE NOT EXISTS 
     (
     SELECT NULL 
     FROM tblDiary d 
     WHERE d.vehicleId = v.id 
       AND endDate >= '2016-06-21' 
       AND startDate <= '2016-06-23' 
     ) 
+0

Я испортил это в своем (теперь удаленном) ответе, этот идеальный. +1 – Jcl

+0

Это прекрасно. Огромное спасибо. Должен ли я помещать индекс в таблицу диарей для ускорения запроса? –

+0

@JamesPrivett: yes, on '(vehicleId, endDate)'. – Quassnoi