Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо двойно вложените изрази NOT EXISTS са неизбежни в SQL

Вашият въпрос е:"Намерете всички компоненти, които са/са били доставени до всички проекти в един конкретен град." Вие префразирате това като "Намерете всички компоненти, където няма проект в даден град, който да няма компонент."

Бих бил по-склонен да отговоря директно на това:

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

Това отчита броя на отделните проекти в града и ги сравнява с броя на проектите в града (distinct идентификатор вероятно не е необходим в подзаявката.

Първо, не съм сигурен дали това е по-просто. Второ, аз съм първият, който признава, че NOT EXISTS метод може бъде по-ефективен, въпреки че влагането на NOT EXISTS в подзаявки може да бъде пагубно за производителността. Мисля обаче, че това е по-лесно за следване.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Трябва да направя auto_increment поле в MySQL, което не е първичен ключ

  2. Каква е разликата между MySQL Native Driver и MySQL Client Library

  3. Java проверява дали стойността съществува в базата данни

  4. Как да съхранявате и извличате текстови данни в MySQL, запазвайки прекъсванията на редовете?

  5. Как да използвам група по с три колони данни?