Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment récupérer des résultats non correspondants dans mysql

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