Możesz użyć left outer join
aby to osiągnąć:
select
t1.tid
from
table1 t1
left outer join table2 t2 on
t1.tid = t2.tid
where
t2.tid is null
To, co to robi, to zabranie twojej pierwszej tabeli (table1 ), łączy go z drugą tabelą (table2 ) i wypełnia null dla table2 kolumny w dowolnym wierszu w table1 który nie pasuje do wiersza w table2 . Następnie filtruje to, wybierając tylko table1 wiersze, w których nie znaleziono dopasowania.
Alternatywnie możesz również użyć not exists
:
select
t1.tid
from
table1 t1
where
not exists (select 1 from table2 t2 where t2.tid = t1.tid)
To wykonuje left semi join , i zasadniczo zrobi to samo, co left outer join robi. W zależności od indeksów jeden może być szybszy od drugiego, ale oba są realnymi opcjami. MySQL ma dobrą dokumentację na temat optymalizacji złączeń , więc powinieneś to sprawdzić.