Używając LEFT OUTER JOIN, możesz wykonać 3 zapytania jako:-
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()
Tutaj wykonuje lewe złącze zewnętrzne dla wszelkich późniejszych dat wygaśnięcia ubezpieczenia i sprawdza, czy i2.id jest NULL, aby upewnić się, że nie znaleziono późniejszej daty wygaśnięcia, a następnie sprawdza znalezioną datę wygaśnięcia, aby sprawdzić, czy wygasła.
SELECT vehicles.ID
FROM vehicles
LEFT OUTER JOIN insurance i1
ON vehicles.ID = i1.vehicle_ID
WHERE i1.id IS NULL
To tylko sprawdza, czy nie ma pasującego rekordu ubezpieczenia
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()
Bardzo podobne do pierwszego zapytania, wykonuje lewe zewnętrzne sprzężenie dla późniejszych dat wygaśnięcia ubezpieczenia i sprawdza, czy i2.id jest NULL, aby upewnić się, że nie znaleziono późniejszej daty wygaśnięcia, a następnie sprawdza znalezioną datę wygaśnięcia, aby sprawdzić, czy nie wygasła .