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

Върнете ред само ако стойността не съществува

SELECT *
FROM reservation
WHERE id NOT IN (select reservation_id
                 FROM reservation_log
                 WHERE change_type = 'cancel')

ИЛИ:

SELECT r.*
FROM reservation r
LEFT JOIN reservation_log l ON r.id = l.reservation_id AND l.change_type = 'cancel'
WHERE l.id IS NULL

Първата версия е по-интуитивна, но мисля, че втората версия обикновено има по-добра производителност (ако приемем, че имате индекси на колоните, използвани в присъединяването).

Втората версия работи, защото LEFT JOIN връща ред за всички редове в първата таблица. Когато ON условието е успешно, тези редове ще включват колоните от втората таблица, точно както INNER JOIN . Когато условието е неуспешно, върнатият ред ще съдържа NULL за всички колони във втората таблица. WHERE l.id IS NULL test след това съвпада с тези редове, така че намира всички редове, които нямат съвпадение между таблиците.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използването на псевдоним на колона в клаузата WHERE на MySQL заявката води до грешка

  2. Ръководство за проектиране на база данни за тест в MySQL

  3. MySql Count не може да показва 0 стойности

  4. Естествено сортиране в MySQL

  5. Инсталирайте множество MySQL екземпляри на Linux сървър - използвайте отделен конфигурационен файл на MySQL