Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL INNER JOIN, um 3 Arten von Ergebnissen zu erhalten

Mit LEFT OUTER JOINs könnten Sie 3 Abfragen wie folgt ausführen:-

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

Hier führt es einen Left Outer Join für alle späteren Versicherungsablaufdaten durch und überprüft, ob i2.id NULL ist, um sicherzustellen, dass kein späteres Ablaufdatum gefunden wird, und überprüft dann das gefundene Ablaufdatum, um zu überprüfen, ob es abgelaufen ist.

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

Dadurch wird nur überprüft, ob es keinen übereinstimmenden Versicherungsdatensatz gibt

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

Ähnlich wie bei der ersten Abfrage führt sie einen Left Outer Join für spätere Versicherungsablaufdaten durch und überprüft, ob i2.id NULL ist, um sicherzustellen, dass kein späteres Ablaufdatum gefunden wird, und überprüft dann das gefundene Ablaufdatum, um sicherzustellen, dass es nicht abgelaufen ist .