sql >> Databasteknik >  >> RDS >> Mysql

Varför är dubbla kapslade NOT EXISTS-satser oundvikliga i SQL

Din fråga är:"Hitta alla komponenter som är/levererades till alla projekt i en specifik stad." Du omformulerar detta som "Hitta alla komponenter där det inte finns något projekt i en given stad som inte har komponenten."

Jag skulle vara mer benägen att svara direkt:

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

Detta räknar antalet distinkta projekt i staden och jämför dem med antalet projekt i staden (den distinkt ID är förmodligen inte nödvändigt i underfrågan.

För det första är jag inte säker på om det här är enklare. För det andra, jag är den första att erkänna att INTE FINNS metod kan vara mer effektiv, även om kapslingen av INTE FINNS i underfrågor kan vara skadligt för prestanda. Jag tror dock att detta är lättare att följa.




  1. Microsoft T-SQL till Oracle SQL översättning

  2. MySQL-fel:Värde utanför intervallet för kolumn "belopp" på rad 1

  3. Hur Atan2() fungerar i PostgreSQL

  4. Separat olika versioner av en webbplats