Sua pergunta é:"Encontre todos os componentes que são/foram enviados para todos os projetos em uma cidade específica." Você está reformulando isso como "Encontre todos os componentes onde não há nenhum projeto em uma determinada cidade que não tenha o componente".
Eu estaria mais inclinado a responder isso diretamente:
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'
);
Isso conta o número de projetos distintos na cidade e os compara com o número de projetos na cidade (o
distinct
id provavelmente não é necessário na subconsulta. Primeiro, não tenho certeza se isso é mais simples. Em segundo lugar, sou o primeiro a admitir que o
NOT EXISTS
método pode ser mais eficiente, embora o aninhamento de NOT EXISTS
em subconsultas pode ser prejudicial ao desempenho. Eu, no entanto, acho que isso é mais fácil de seguir.