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

Como recuperar resultados não correspondentes no mysql


Você pode usar uma left outer join para realizar isso:
select
    t1.tid
from
    table1 t1
    left outer join table2 t2 on
        t1.tid = t2.tid
where
    t2.tid is null

O que isso faz é pegar sua primeira tabela (table1 ), une-o com sua segunda tabela (table2 ) e preenche null para a table2 colunas em qualquer linha em table1 que não corresponde a uma linha em table2 . Em seguida, ele filtra isso selecionando apenas a table1 linhas onde nenhuma correspondência pôde ser encontrada.

Como alternativa, você também pode usar not exists :
select
    t1.tid
from
    table1 t1
where
    not exists (select 1 from table2 t2 where t2.tid = t1.tid)

Isso executa uma left semi join , e fará essencialmente a mesma coisa que a left outer join faz. Dependendo de seus índices, um pode ser mais rápido que o outro, mas ambos são opções viáveis. O MySQL tem uma boa documentação sobre otimizar as junções , então você deve verificar isso ..