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

MySQL:Tìm các hàng không tham gia vào mối quan hệ

Đây là một cách điển hình để thực hiện truy vấn này mà không cần sử dụng phương thức truy vấn con mà bạn đã chỉ ra. Điều này có thể đáp ứng yêu cầu của @ Godeke về việc xem một giải pháp dựa trên liên kết.

SELECT * 
FROM movies m
 LEFT OUTER JOIN seen s
 ON (m.id = s.movie_id AND s.user_id = 123)
WHERE s.movie_id IS NULL;

Tuy nhiên, trong hầu hết các thương hiệu của cơ sở dữ liệu, giải pháp này có thể hoạt động kém hơn so với giải pháp truy vấn con. Tốt nhất nên sử dụng EXPLAIN để phân tích cả hai truy vấn, để xem truy vấn nào sẽ hoạt động tốt hơn với lược đồ và dữ liệu của bạn.

Đây là một biến thể khác của giải pháp truy vấn con:

SELECT * 
FROM movies m
WHERE NOT EXISTS (SELECT * FROM seen s 
                  WHERE s.movie_id = m.id 
                    AND s.user_id=123);

Đây là một truy vấn con có tương quan, phải được đánh giá cho mọi hàng của truy vấn bên ngoài. Thông thường, điều này là tốn kém và truy vấn mẫu ban đầu của bạn tốt hơn. Mặt khác, trong MySQL "NOT EXISTS "thường tốt hơn" column NOT IN (...) "

Một lần nữa, bạn phải thử nghiệm từng giải pháp và so sánh kết quả để chắc chắn. Thật lãng phí thời gian để chọn bất kỳ giải pháp nào mà không đo lường hiệu suất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới thiệu về con trỏ và trình lặp mysql

  2. Cách tối ưu hóa ĐƠN ĐẶT HÀNG THEO cho một cột được tính toán trên bảng MASSIVE MySQL

  3. Không thể sử dụng kết nối MySQL cho khung thực thể 6

  4. cách đăng nhập vào mysql và truy vấn cơ sở dữ liệu từ thiết bị đầu cuối linux

  5. Mô hình codeigniter với nhiều điều kiện cập nhật bằng cách sử dụng câu lệnh where thủ công