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

SQL :ne renvoie que les enregistrements sans aucune association répondant aux critères

Le moyen le plus simple est avec not exists ou left join :

select u.*
from users u left join
     addresses a
     on a.username = u.username and
        a.city = 'Peoria'
where a.city is null;

La left join conserve tous les enregistrements dans les utilisateurs et tous les enregistrements dans les addresses qui correspondent au on les conditions. Dans ce cas (parce que le nom de la ville est dans le on condition), il renvoie tous les utilisateurs avec des informations sur les villes ou NULL valeurs. Le where la clause choisit le NULL valeurs -- celles qui ne correspondent pas.

L'équivalent not exists pourrait être plus facile à suivre :

select u.*
from users u 
where not exists (select 1
                  from addresses a
                  where a.username = u.username and
                        a.city = 'Peoria'
                 );