Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Selecione * da tabela1 que não existe na tabela2 com condicional


Usando LEFT JOIN/IS NULL:
   SELECT t.*
     FROM TABLE_LIST t
LEFT JOIN TABLE_LOG tl ON tl.jid = t.jid
    WHERE tl.jid IS NULL

Usando NOT IN:
SELECT t.*
  FROM TABLE_LIST t
 WHERE t.jid NOT IN (SELECT tl.jid
                       FROM TABLE_LOG tl
                   GROUP BY tl.jid)

Usando NOT EXISTS:
SELECT t.*
  FROM TABLE_LIST t
 WHERE NOT EXISTS(SELECT NULL
                    FROM TABLE_LOG tl
                   WHERE tl.jid = t.jid)

FYI
LEFT JOIN/IS NULL e NOT IN são equivalentes no MySQL - eles terão o mesmo desempenho, enquanto NOT EXISTS é mais lento/menos eficiente. Para mais detalhes:http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/