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

Truy vấn SQL ít nhất một trong những thứ gì đó

Để tìm tất cả người dùng có ít nhất một bài đăng có xếp hạng trên 10, hãy sử dụng:

SELECT u.*
  FROM USERS u
 WHERE EXISTS(SELECT NULL
                FROM POSTS p
               WHERE p.user_id = u.id
                 AND p.rating > 10)

EXISTS không quan tâm đến câu lệnh SELECT bên trong nó - bạn có thể thay thế NULL bằng 1/0, điều này sẽ dẫn đến lỗi toán học khi chia cho 0 ... Nhưng nó sẽ không, bởi vì EXISTS chỉ quan tâm đến việc lọc trong mệnh đề WHERE.

Mối tương quan (WHERE p.user_id =u.id) là lý do tại sao điều này được gọi là truy vấn con tương quan và sẽ chỉ trả về các hàng từ bảng USERS nơi các giá trị id khớp, ngoài so sánh xếp hạng.

EXISTS cũng nhanh hơn, tùy thuộc vào tình huống, vì nó trả về true ngay sau khi tiêu chí được đáp ứng - các bản sao không quan trọng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhanh nhất để chèn đối tượng nếu nó không tồn tại với SQLAlchemy

  2. Truy xuất id được chèn lần cuối bằng Mysql

  3. Xóa các thẻ HTML khỏi bản ghi

  4. Có gì sai với SQL của tôi ở đây? # 1089 - Khóa tiền tố không chính xác

  5. Tinh chỉnh hiệu suất InnoDB