2016-04-27 18 views
2

Ich versuche, eine Liste der Fahrzeuge, bei denen ich weiß, dass sie nicht bereits für einen aktuellen Zeitraum gebucht sind. Ich habe eine tblVehicles Tabelle:MYSQL Datum vergleichen Abfrage

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

Ich habe auch eine Tabelle (tblDiary), die alle Termine hält das Fahrzeug verwendet wird:

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 

Also ich versuche, eine Abfrage zu schreiben, wo ich möchte Fahrzeuge finden, die zwischen 2016-06-21 & 2016-06-23 verfügbar sind. Also in diesem Fall wäre das gewünschte Ergebnis:

Was ist der effizienteste Weg, dies zu tun?

Antwort

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

Ich vermasselte es in meiner (jetzt gelöscht) Antwort, diese ist perfekt. +1 – Jcl

+0

Das ist perfekt. Vielen Dank. Sollte ich einen Index auf den Diray-Tisch setzen, um die Abfrage zu beschleunigen? –

+0

@JamesPrivett: Ja, auf '(vehicleID, endDate)'. – Quassnoi