sql >> Base de Datos >  >> RDS >> Mysql

MYSQL INNER JOIN para obtener 3 tipos de resultados

Usando LEFT OUTER JOIN, sus 3 consultas se pueden hacer 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()

Aquí hace una combinación externa izquierda para cualquier fecha de vencimiento posterior del seguro, y verifica que i2.id sea NULL para garantizar que no se encuentre una fecha de vencimiento posterior, y luego verifica la fecha de vencimiento encontrada para verificar que haya vencido.

SELECT vehicles.ID 
FROM vehicles 
LEFT OUTER JOIN insurance i1 
ON vehicles.ID = i1.vehicle_ID 
WHERE i1.id IS NULL

Esto solo verifica que no haya un registro de seguro coincidente

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()

Muy similar a la primera consulta, hace una combinación externa izquierda para cualquier fecha de vencimiento posterior del seguro y verifica que i2.id sea NULL para asegurarse de que no se encuentre una fecha de vencimiento posterior, y luego verifica la fecha de vencimiento encontrada para verificar que no haya vencido. .