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'
);