Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL INNER JOIN para obter 3 tipos de resultado


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 .