Din fråga är:"Hitta alla komponenter som är/levererades till alla projekt i en specifik stad." Du omformulerar detta som "Hitta alla komponenter där det inte finns något projekt i en given stad som inte har komponenten."
Jag skulle vara mer benägen att svara direkt:
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'
);
Detta räknar antalet distinkta projekt i staden och jämför dem med antalet projekt i staden (den distinkt
ID är förmodligen inte nödvändigt i underfrågan.
För det första är jag inte säker på om det här är enklare. För det andra, jag är den första att erkänna att INTE FINNS
i underfrågor kan vara skadligt för prestanda. Jag tror dock att detta är lättare att följa.