sql >> Databáze >  >> RDS >> Mysql

Proč jsou v SQL nevyhnutelné dvojitě vnořené příkazy NOT EXISTS

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.




  1. Vytváření pohledů napříč různými databázemi

  2. GATHER_PLAN_STATISTICS negeneruje základní statistiky plánu

  3. 2 způsoby, jak vybrat řádky, které odpovídají všem položkám v seznamu (T-SQL)

  4. Provedení porovnání LIKE na poli INT