Uw vraag is:"Zoek alle componenten die naar alle projecten in één specifieke stad zijn/werden verzonden." U herformuleert dit als "Vind alle componenten waar er geen project is in een bepaalde stad die de component niet heeft."
Ik zou eerder geneigd zijn om dit direct te beantwoorden:
select scp.component
from scp join
projects p
on scp.pnr = p.pnr
where p.city = 'Foobar Town'
group scp.component
having count(distinct scp.pnr) = (select count(distinct pnr)
from projects
where city = 'Foobar Town'
);
Deze telt het aantal verschillende projecten in de stad en vergelijkt ze met het aantal projecten in de stad (de distinct
id waarschijnlijk niet nodig in de subquery.
Ten eerste weet ik niet zeker of dit eenvoudiger is. Ten tweede ben ik de eerste om toe te geven dat de NOT EXISTS
methode kan efficiënter zijn, hoewel het nesten van NOT EXISTS
in subquery's kan nadelig zijn voor de prestaties. Ik denk echter dat dit gemakkelijker te volgen is.