Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengapa pernyataan NOT EXISTS bersarang ganda tidak dapat dihindari dalam SQL

Pertanyaan Anda adalah:"Temukan semua komponen yang/dikirim ke semua proyek di satu kota tertentu." Anda mengulangi ini sebagai "Temukan semua komponen di mana tidak ada proyek di kota tertentu yang tidak memiliki komponen."

Saya akan lebih cenderung menjawab ini secara langsung:

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

Ini menghitung jumlah proyek berbeda di kota dan membandingkannya dengan jumlah proyek di kota (distinct id mungkin tidak diperlukan di subquery.

Pertama, saya tidak yakin apakah ini lebih sederhana. Kedua, saya yang pertama mengakui bahwa NOT EXISTS metode mungkin menjadi lebih efisien, meskipun sarang dari NOT EXISTS dalam subquery dapat merusak kinerja. Namun, menurut saya ini lebih mudah diikuti.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan Hanya nama kolom seperti dalam array mysql

  2. atur ulang kata sandi root dengan konfigurasi mysql yang salah

  3. Tidak dapat menginisialisasi penyedia. Skema tidak ada atau salah

  4. perbarui nilai kolom dengan kolom tabel lain berdasarkan kondisi

  5. Sistem Pencapaian / Lencana