sql >> Database >  >> RDS >> Mysql

Waarom zijn dubbel geneste NOT EXISTS-instructies onvermijdelijk in SQL?

Uw vraag is:"Zoek alle componenten die naar alle projecten in één specifieke stad zijn/werden verzonden." U herformuleert dit als "Vind alle componenten waar er geen project is in een bepaalde stad die de component niet heeft."

Ik zou eerder geneigd zijn om dit direct te beantwoorden:

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'
                                 );

Deze telt het aantal verschillende projecten in de stad en vergelijkt ze met het aantal projecten in de stad (de distinct id waarschijnlijk niet nodig in de subquery.

Ten eerste weet ik niet zeker of dit eenvoudiger is. Ten tweede ben ik de eerste om toe te geven dat de NOT EXISTS methode kan efficiënter zijn, hoewel het nesten van NOT EXISTS in subquery's kan nadelig zijn voor de prestaties. Ik denk echter dat dit gemakkelijker te volgen is.




  1. Willekeurig record uit mysql-database met CodeIgniter

  2. mysql datum resultaten weergeven vandaag/gisteren/week

  3. Meest populaire databasebeheersystemen ter wereld

  4. De hoogste resultaten behalen in een JOIN