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

Как да извлечете несъответстващи резултати в mysql

Можете да използвате left outer join за да постигнете това:

select
    t1.tid
from
    table1 t1
    left outer join table2 t2 on
        t1.tid = t2.tid
where
    t2.tid is null

Това, което прави, е, че отнема първата ви таблица (table1 ), го присъединява към втората ви таблица (table2 ) и попълва null за table2 колони във всеки ред в table1 който не съвпада с ред в table2 . След това филтрира това, като избере само table1 редове, където не може да бъде намерено съвпадение.

Като алтернатива можете също да използвате not exists :

select
    t1.tid
from
    table1 t1
where
    not exists (select 1 from table2 t2 where t2.tid = t1.tid)

Това извършва left semi join , и по същество ще направи същото, което left outer join прави. В зависимост от вашите индекси, единият може да е по-бърз от другия, но и двете са жизнеспособни опции. MySQL има добра документация за оптимизирането на присъединяванията , така че трябва да проверите това...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. добавяне на 1 ден към стойност във формат DATETIME

  2. Mysql Max с групиране по заявка

  3. Laravel и InnoDB

  4. Изберете всички месеци в рамките на даден период от време, включително тези със стойности 0

  5. MySQL късо съединение на функцията IF()?