Der einfachste Weg ist mit not exists
oder 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;
Der left join
behält alle Datensätze in Benutzern und alle Datensätze in addresses
die mit on
übereinstimmen Bedingungen. In diesem Fall (weil der Städtename im on
steht Bedingung), gibt es allen Benutzern entweder Informationen über die Städte oder NULL
zurück Werte. Das where
-Klausel wählt den NULL
Werte -- die nicht übereinstimmenden.
Der entsprechende not exists
könnte einfacher zu befolgen sein:
select u.*
from users u
where not exists (select 1
from addresses a
where a.username = u.username and
a.city = 'Peoria'
);