sql >> Database teknologi >  >> RDS >> Mysql

Sådan henter du ikke-matchende resultater i mysql

Du kan bruge en venstre ydre joinforbindelse for at opnå dette:

select
    t1.tid
from
    table1 t1
    left outer join table2 t2 on
        t1.tid = t2.tid
where
    t2.tid is null

Hvad dette gør, er, at det tager din første tabel (tabel1 ), forbinder den med din anden tabel (tabel2 ), og udfylder null for tabel2 kolonner i enhver række i tabel1 der ikke matcher en række i tabel2 . Derefter filtrerer den det fra ved kun at vælge tabel1 rækker, hvor der ikke kunne findes noget match.

Alternativt kan du også bruge findes ikke :

select
    t1.tid
from
    table1 t1
where
    not exists (select 1 from table2 t2 where t2.tid = t1.tid)

Dette udfører en venstre semi join , og vil i det væsentlige gøre det samme som den ydre venstre join gør. Afhængigt af dine indekser kan det ene være hurtigere end det andet, men begge er levedygtige muligheder. MySQL har noget god dokumentation om optimering af joinforbindelserne a> , så du bør tjekke det ud..




  1. Sådan bruges ora_hash på en kolonne med datatype xmltype

  2. DataTable med Ajax fungerer ikke godt efter brug serverSide:sand

  3. Få localhost til at køre på mac OS X Yosemite

  4. Forskellen mellem sys.views, sys.system_views og sys.all_views i SQL Server