De eenvoudigste manier is met not exists
of 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;
De left join
bewaart alle records in gebruikers en alle records in addresses
die overeenkomen met de on
conditie. In dit geval (omdat de plaatsnaam in on
staat) voorwaarde), retourneert het alle gebruikers met informatie over de steden of NULL
waarden. De where
clausule kiest de NULL
waarden -- de niet-overeenkomende.
De equivalente not exists
is misschien makkelijker te volgen:
select u.*
from users u
where not exists (select 1
from addresses a
where a.username = u.username and
a.city = 'Peoria'
);