Vaše otázka zní:"Najděte všechny komponenty, které jsou/byly odeslány do všech projektů v jednom konkrétním městě." Přeformulujete to jako „Najděte všechny komponenty, kde v daném městě není žádný projekt, který tuto komponentu nemá.“
Spíše bych se přikláněl k přímé odpovědi:
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'
);
To spočítá počet různých projektů ve městě a porovná je s počtem projektů ve městě (distinct
id pravděpodobně není nutné v poddotazu.
Za prvé, nejsem si jistý, jestli je to jednodušší. Za druhé, jsem první, kdo připouští, že NOT EXISTS
metoda může být efektivnější, i když vnoření NOT EXISTS
v dílčích dotazech může být škodlivý pro výkon. Myslím si však, že toto je snazší sledovat.