Usando LEFT OUTER JOIN, è possibile eseguire 3 query come:-
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()
Qui esegue un join esterno sinistro per eventuali date di scadenza dell'assicurazione successive e verifica che i2.id sia NULL per assicurarsi che non venga trovata una data di scadenza successiva, quindi controlla la data di scadenza trovata per verificare che sia scaduta.
SELECT vehicles.ID
FROM vehicles
LEFT OUTER JOIN insurance i1
ON vehicles.ID = i1.vehicle_ID
WHERE i1.id IS NULL
Questo controlla solo che non ci siano record assicurativi corrispondenti
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()
Molto simile alla prima query, esegue un join esterno sinistro per eventuali date di scadenza dell'assicurazione successive e verifica che i2.id sia NULL per assicurarsi che non venga trovata una data di scadenza successiva, quindi controlla la data di scadenza trovata per verificare che non sia scaduta .