Използвайки LEFT OUTER JOINs, вашите 3 заявки могат да бъдат направени като:-
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()
Тук прави ляво външно съединяване за всички по-късни дати на изтичане на застраховката и проверява дали i2.id е NULL, за да се увери, че не е намерена по-късна дата на изтичане, и след това проверява намерената дата на изтичане, за да провери дали е изтекла.
SELECT vehicles.ID
FROM vehicles
LEFT OUTER JOIN insurance i1
ON vehicles.ID = i1.vehicle_ID
WHERE i1.id IS NULL
Това само проверява дали няма съответстващо застрахователно досие
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()
Много подобно на първата заявка, тя прави ляво външно съединяване за всички по-късни дати на изтичане на застраховката и проверява дали i2.id е NULL, за да се увери, че не е намерена по-късна дата на изтичане, и след това проверява намерената дата на изтичане, за да провери дали не е изтекла .