Du kan använda en vänster yttre koppling
för att åstadkomma detta:
select
t1.tid
from
table1 t1
left outer join table2 t2 on
t1.tid = t2.tid
where
t2.tid is null
Vad detta gör är att det tar din första tabell (tabell1
), sammanfogar den med din andra tabell (tabell2
), och fyller i null
för tabell2
kolumner i valfri rad i tabell1
som inte matchar en rad i tabell2
. Sedan filtrerar den bort det genom att bara välja tabell1
rader där ingen matchning kunde hittas.
Alternativt kan du också använda finns inte :
select
t1.tid
from
table1 t1
where
not exists (select 1 from table2 t2 where t2.tid = t1.tid)
Detta utför en left semi join
, och kommer i huvudsak att göra samma sak som den vänstra yttre kopplingen
gör. Beroende på dina index kan det ena vara snabbare än det andra, men båda är genomförbara alternativ. MySQL har en del bra dokumentation om optimering av sammanfogningarna , så du borde kolla upp det..