sql >> Databasteknik >  >> RDS >> Mysql

Hur man hämtar icke-matchande resultat i mysql

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




  1. Skapa tabell (struktur) från befintlig tabell

  2. Returnera ISO-veckonummer från ett datum i SQL Server (T-SQL)

  3. PHP upptäcker SQL-injektionsförsök

  4. Bindande variabel till tabellnamn med cx_Oracle