Dit spørgsmål er:"Find alle komponenter, der er/blev sendt til alle projekter i en bestemt by." Du omformulerer dette som "Find alle komponenter, hvor der ikke er noget projekt i en given by, der ikke har komponenten."
Jeg ville være mere tilbøjelig til at svare direkte på dette:
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'
);
Dette tæller antallet af særskilte projekter i byen og sammenligner dem med antallet af projekter i byen (den distinct
id sandsynligvis ikke nødvendigt i underforespørgslen.
For det første er jeg ikke sikker på, om dette er enklere. For det andet er jeg den første til at indrømme, at NOT EXISTS
metode kan være mere effektiv, selvom indlejringen af NOT EXISTS
i underforespørgsler kan være skadeligt for ydeevnen. Jeg tror dog, at dette er lettere at følge.