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...