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

Come recuperare risultati non corrispondenti in MySQL

Puoi utilizzare un left outer join per realizzare questo:

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

Ciò che fa è prendere la tua prima tabella (table1 ), si unisce alla tua seconda tabella (table2 ), e inserisce null per la table2 colonne in qualsiasi riga in table1 che non corrisponde a una riga in table2 . Quindi, lo filtra selezionando solo la table1 righe in cui non è stata trovata alcuna corrispondenza.

In alternativa, puoi anche utilizzare not exists :

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

Questo esegue un left semi join , e essenzialmente farà la stessa cosa che il left outer join fa. A seconda dei tuoi indici, uno potrebbe essere più veloce dell'altro, ma entrambe sono opzioni praticabili. MySQL ha una buona documentazione sull'ottimizzazione dei join , quindi dovresti verificarlo.