Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego podwójnie zagnieżdżone instrukcje NOT EXISTS są w SQL nieuniknione?

Twoje pytanie brzmi:„Znajdź wszystkie komponenty, które zostały/zostały wysłane do wszystkich projektów w jednym konkretnym mieście”. Przeformułujesz to jako „Znajdź wszystkie komponenty, w których nie ma projektu w danym mieście, który nie ma komponentu”.

Chętnie odpowiem na to bezpośrednio:

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

Liczy liczbę odrębnych projektów w mieście i porównuje je z liczbą projektów w mieście (distinct id prawdopodobnie nie jest konieczne w podzapytaniu.

Po pierwsze, nie jestem pewien, czy to jest prostsze. Po drugie, jako pierwszy przyznaję, że NOT EXISTS metoda może być bardziej wydajne, chociaż zagnieżdżenie NOT EXISTS w podzapytaniach może mieć negatywny wpływ na wydajność. Myślę jednak, że jest to łatwiejsze do naśladowania.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MysqlDump z kodowania Powershell i Windows

  2. Kursor pętli procedury składowanej MySql — błąd składni

  3. Jak zabezpieczyć pliki przed nieautoryzowanym pobieraniem

  4. Po zduplikowanym kluczu aktualizuj tylko wartości Null lub puste

  5. Jak połączyć się z Amazon RDS przez SSL?