Pomocí LEFT OUTER JOINů můžete 3 dotazy provést takto:-
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()
Zde provede levé vnější spojení pro případná pozdější data vypršení platnosti pojištění a zkontroluje, zda i2.id nemá hodnotu NULL, aby se ujistil, že nebylo nalezeno žádné pozdější datum vypršení platnosti, a poté zkontroluje nalezené datum vypršení platnosti, aby zkontroloval, zda vypršela.
SELECT vehicles.ID
FROM vehicles
LEFT OUTER JOIN insurance i1
ON vehicles.ID = i1.vehicle_ID
WHERE i1.id IS NULL
To jen zkontroluje, že neexistuje žádný odpovídající pojistný záznam
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()
Velmi podobně jako u prvního dotazu provede levé vnější spojení pro všechna pozdější data vypršení platnosti pojištění a zkontroluje, zda má i2.id hodnotu NULL, aby se zajistilo, že nebylo nalezeno žádné pozdější datum vypršení platnosti, a poté zkontroluje nalezené datum vypršení platnosti, aby zkontrolovalo, zda nevypršelo. .