Nejjednodušší způsob je s not exists
nebo 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;
left join
uchovává všechny záznamy o uživatelích a všechny záznamy v addresses
které odpovídají on
podmínky. V tomto případě (protože název města je v on
podmínkou), vrátí všem uživatelům buď informace o městech, nebo NULL
hodnoty. where
klauzule vybere NULL
hodnoty -- ty, které se neshodují.
Ekvivalent not exists
může být jednodušší sledovat:
select u.*
from users u
where not exists (select 1
from addresses a
where a.username = u.username and
a.city = 'Peoria'
);