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