Su pregunta es:"Encuentre todos los componentes que se enviaron/se enviaron a todos los proyectos en una ciudad específica". Está reformulando esto como "Encuentre todos los componentes donde no haya ningún proyecto en una ciudad determinada que no tenga el componente".
Me inclinaría más a responder esto directamente:
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'
);
Esto cuenta el número de proyectos distintos en la ciudad y los compara con el número de proyectos en la ciudad (el distinct
id probablemente no sea necesario en la subconsulta.
Primero, no estoy seguro si esto es más simple. Segundo, soy el primero en admitir que NOT EXISTS
método puede ser más eficiente, aunque el anidamiento de NOT EXISTS
en subconsultas puede ser perjudicial para el rendimiento. Sin embargo, creo que esto es más fácil de seguir.