sql >> Databáze >  >> RDS >> Mysql

MYSQL INNER JOIN a získáte 3 typy výsledků

Pomocí LEFT OUTER JOINů můžete 3 dotazy provést takto:-

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

Zde provede levé vnější spojení pro případná pozdější data vypršení platnosti pojištění a zkontroluje, zda i2.id nemá hodnotu NULL, aby se ujistil, že nebylo nalezeno žádné pozdější datum vypršení platnosti, a poté zkontroluje nalezené datum vypršení platnosti, aby zkontroloval, zda vypršela.

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

To jen zkontroluje, že neexistuje žádný odpovídající pojistný záznam

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

Velmi podobně jako u prvního dotazu provede levé vnější spojení pro všechna pozdější data vypršení platnosti pojištění a zkontroluje, zda má i2.id hodnotu NULL, aby se zajistilo, že nebylo nalezeno žádné pozdější datum vypršení platnosti, a poté zkontroluje nalezené datum vypršení platnosti, aby zkontrolovalo, zda nevypršelo. .



  1. Snadná obnova databáze SQL – průvodce krok za krokem

  2. Symfony2 - Doctrine2 QueryBuilder WHERE V poli ManyToMany

  3. Mysql - Jak mohu vybrat řádky podle roku, pokud mám pouze časové razítko?

  4. nelze přenést hodnotu jako float