Mysql
 sql >> база данни >  >> RDS >> Mysql

MYSQL INNER JOIN за получаване на 3 вида резултат

Използвайки LEFT OUTER JOINs, вашите 3 заявки могат да бъдат направени като:-

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

Тук прави ляво външно съединяване за всички по-късни дати на изтичане на застраховката и проверява дали i2.id е NULL, за да се увери, че не е намерена по-късна дата на изтичане, и след това проверява намерената дата на изтичане, за да провери дали е изтекла.

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

Това само проверява дали няма съответстващо застрахователно досие

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

Много подобно на първата заявка, тя прави ляво външно съединяване за всички по-късни дати на изтичане на застраховката и проверява дали i2.id е NULL, за да се увери, че не е намерена по-късна дата на изтичане, и след това проверява намерената дата на изтичане, за да провери дали не е изтекла .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Заявката за избор на MySQL е ужасно бавна

  2. SQL много към много изберете

  3. Отстраняване на неизправности:MySQL/MariaDB грешка #1044 и #1045 Достъпът е отказан за потребителя

  4. Замяна на mysql_* функции с PDO и подготвени оператори

  5. как да покажа всички извлечени данни от MYSQL