Vous pouvez utiliser une left outer join
pour y parvenir :
select
t1.tid
from
table1 t1
left outer join table2 t2 on
t1.tid = t2.tid
where
t2.tid is null
Cela prend votre première table (table1
), le joint à votre deuxième table (table2
), et renseigne null
pour la table2
colonnes dans n'importe quelle ligne de table1
qui ne correspond pas à une ligne dans table2
. Ensuite, il filtre cela en sélectionnant uniquement le table1
lignes où aucune correspondance n'a pu être trouvée.
Vous pouvez également utiliser not exists
:
select
t1.tid
from
table1 t1
where
not exists (select 1 from table2 t2 where t2.tid = t1.tid)
Ceci effectue une left semi join
, et fera essentiellement la même chose que la left outer join
Est-ce que. Selon vos index, l'un peut être plus rapide que l'autre, mais les deux sont des options viables. MySQL a une bonne documentation sur l'optimisation des jointures , vous devriez donc vérifier cela..