sql >> Base de Datos >  >> RDS >> Mysql

Cómo recuperar resultados no coincidentes en mysql

Puede usar un left outer join para lograr esto:

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

Lo que esto hace es tomar su primera tabla (table1 ), lo une con su segunda tabla (table2 ), y completa null para la table2 columnas en cualquier fila en table1 que no coincide con una fila en table2 . Luego, filtra eso seleccionando solo el table1 filas donde no se pudo encontrar ninguna coincidencia.

Alternativamente, también puede usar not exists :

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

Esto realiza una left semi join , y esencialmente hará lo mismo que la left outer join hace. Según sus índices, uno puede ser más rápido que el otro, pero ambas son opciones viables. MySQL tiene buena documentación sobre optimización de combinaciones , así que deberías comprobarlo...