Usando LEFT OUTER JOINs, você 3 consultas podem ser feitas como:-
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()
Aqui ele faz uma junção externa esquerda para quaisquer datas de expiração de seguro posteriores e verifica se i2.id é NULL para garantir que nenhuma data de expiração posterior seja encontrada e, em seguida, verifica a data de expiração encontrada para verificar se expirou.
SELECT vehicles.ID
FROM vehicles
LEFT OUTER JOIN insurance i1
ON vehicles.ID = i1.vehicle_ID
WHERE i1.id IS NULL
Isso apenas verifica se não há registro de seguro correspondente
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()
Muito semelhante à primeira consulta, ele faz uma junção externa esquerda para quaisquer datas de expiração de seguro posteriores e verifica se i2.id é NULL para garantir que nenhuma data de expiração posterior seja encontrada e, em seguida, verifica a data de expiração encontrada para verificar se não expirou .