Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tại sao các câu lệnh NOT EXISTS lồng nhau không thể tránh khỏi trong SQL

Câu hỏi của bạn là:"Tìm tất cả các thành phần đã / được vận chuyển đến tất cả các dự án trong một thành phố cụ thể." Bạn đang diễn đạt lại điều này là "Tìm tất cả các thành phần không có dự án nào trong một thành phố nhất định không có thành phần đó."

Tôi muốn trả lời trực tiếp vấn đề này hơn:

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

Điều này đếm số lượng các dự án riêng biệt trong thành phố và so sánh chúng với số lượng các dự án trong thành phố (distinct id có lẽ không cần thiết trong truy vấn con.

Đầu tiên, tôi không chắc liệu điều này có đơn giản hơn không. Thứ hai, tôi là người đầu tiên thừa nhận rằng NOT EXISTS phương pháp may hiệu quả hơn, mặc dù việc lồng NOT EXISTS trong các truy vấn con có thể gây bất lợi cho hiệu suất. Tuy nhiên, tôi nghĩ rằng điều này dễ thực hiện hơn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mySQL chọn mã zip trong phạm vi x km / dặm trong phạm vi của y

  2. Làm cách nào để kết nối cơ sở dữ liệu MySQL với Ứng dụng C # WinForm?

  3. Thiết lập kết nối Kafka để gửi bản ghi từ Aurora bằng AWS MSK

  4. Chia phạm vi ngày thành các tuần tương ứng

  5. Đặt cơ sở dữ liệu MySQL dưới quyền kiểm soát phiên bản?