Genom att använda LEFT OUTER JOINs kan du 3 frågor göras som:-
SELECT vehicles.ID
FROM vehicles
INNER JOIN insurance i1
ON vehicles.ID = i1.vehicle_ID
LEFT OUTER JOIN insurance i2
ON i1.vehicle_ID = i2.vehicle_ID
AND i2.expire > i1.expire
WHERE i2.id IS NULL
AND i1.expire < NOW()
Här gör den en vänster yttre koppling för eventuella senare försäkringsförfallodatum, och kontrollerar att i2.id är NULL för att säkerställa att inget senare utgångsdatum hittas, och kontrollerar sedan det hittade utgångsdatumet för att kontrollera att det har gått ut.
SELECT vehicles.ID
FROM vehicles
LEFT OUTER JOIN insurance i1
ON vehicles.ID = i1.vehicle_ID
WHERE i1.id IS NULL
Detta kontrollerar bara att det inte finns något matchande försäkringsregister
SELECT vehicles.ID
FROM vehicles
INNER JOIN insurance i1
ON vehicles.ID = i1.vehicle_ID
LEFT OUTER JOIN insurance i2
ON i1.vehicle_ID = i2.vehicle_ID
AND i2.expire > i1.expire
WHERE i2.id IS NULL
AND i1.expire >= NOW()
Mycket lik den första frågan, den gör en vänster yttre koppling för eventuella senare försäkringsförfallodatum, och kontrollerar att i2.id är NULL för att säkerställa att inget senare utgångsdatum hittas, och kontrollerar sedan det hittade utgångsdatumet för att kontrollera att det inte har gått ut .