Mysql
 sql >> Base de données >  >> RDS >> Mysql

MYSQL INNER JOIN pour obtenir 3 types de résultats

En utilisant LEFT OUTER JOIN, vos 3 requêtes peuvent être effectuées comme suit :-

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

Ici, il fait une jointure externe gauche pour toutes les dates d'expiration d'assurance ultérieures et vérifie si i2.id est NULL pour s'assurer qu'aucune date d'expiration ultérieure n'est trouvée, puis vérifie la date d'expiration trouvée pour vérifier qu'elle a expiré.

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

Cela vérifie simplement qu'il n'y a pas de dossier d'assurance correspondant

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

Très similaire à la première requête, il fait une jointure externe gauche pour toutes les dates d'expiration d'assurance ultérieures et vérifie si i2.id est NULL pour s'assurer qu'aucune date d'expiration ultérieure n'est trouvée, puis vérifie la date d'expiration trouvée pour vérifier qu'elle n'a pas expiré .