Най-простият начин е с not exists
или 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
съхранява всички записи в потребители и всички записи в addresses
които съответстват на on
условия. В този случай (тъй като името на града е в on
условие), той връща всички потребители или с информация за градовете, или с NULL
стойности. where
клаузата избира NULL
стойности -- несъвпадащите.
Еквивалентният not exists
може да е по-лесно за следване:
select u.*
from users u
where not exists (select 1
from addresses a
where a.username = u.username and
a.city = 'Peoria'
);