Mysql
 sql >> Database >  >> RDS >> Mysql

MYSQL INNER JOIN per ottenere 3 tipi di risultato

Usando LEFT OUTER JOIN, è possibile eseguire 3 query come:-

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

Qui esegue un join esterno sinistro per eventuali date di scadenza dell'assicurazione successive e verifica che i2.id sia NULL per assicurarsi che non venga trovata una data di scadenza successiva, quindi controlla la data di scadenza trovata per verificare che sia scaduta.

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

Questo controlla solo che non ci siano record assicurativi corrispondenti

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

Molto simile alla prima query, esegue un join esterno sinistro per eventuali date di scadenza dell'assicurazione successive e verifica che i2.id sia NULL per assicurarsi che non venga trovata una data di scadenza successiva, quindi controlla la data di scadenza trovata per verificare che non sia scaduta .