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

tôi nên sử dụng truy vấn mysql nào để chọn một danh mục phù hợp với TẤT CẢ các tiêu chí của tôi?

SELECT  cat_id
FROM    (
        SELECT  DISTINCT cat_id
        FROM    cat_product
        ) cpo
WHERE   EXISTS
        (
        SELECT  NULL
        FROM    cat_product cpi
        WHERE   cpi.cat_id = cpo.cat_id
                AND product_id IN (2, 3)
        LIMIT 1, 1
        )

Bạn cần có UNIQUE lập chỉ mục trên (cat_id, product_id) (theo thứ tự này) để việc này hoạt động nhanh chóng.

Giải pháp này sẽ sử dụng INDEX FOR GROUP BY để nhận danh sách các danh mục riêng biệt và EXISTS vị từ sẽ nhanh hơn một chút so với COUNT(*) (vì việc tổng hợp yêu cầu một số chi phí).

Nếu bạn có nhiều hơn hai sản phẩm để tìm kiếm, hãy điều chỉnh đối số đầu tiên thành LIMIT theo đó.

Nó phải là LIMIT n - 1, 1 , ở đâu n là số mục trong IN danh sách.

Cập nhật:

Để trả lại các danh mục chứa tất cả các sản phẩm từ danh sách và không có gì khác, hãy sử dụng tùy chọn này:

SELECT  cat_id
FROM    (
        SELECT  DISTINCT cat_id
        FROM    cat_product
        ) cpo
WHERE   EXISTS
        (
        SELECT  NULL
        FROM    cat_product cpi
        WHERE   cpi.cat_id = cpo.cat_id
                AND product_id IN (2, 3)
        LIMIT 1, 1
        )
        AND NOT EXISTS
        (
        SELECT  NULL
        FROM    cat_product cpi
        WHERE   cpi.cat_id = cpo.cat_id
                AND product_id NOT IN (2, 3)
        )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về WEEK () - MySQL

  2. Dấu thời gian với độ chính xác mili giây:Cách lưu chúng trong MySQL

  3. Người dùng chưa được xác thực trong MYSQL nghĩa là gì?

  4. MySQL:Không thể đặt tên cho bảng trong trường hợp Upper Camel (Pascal Case)

  5. MySQL sau khi chèn kích hoạt nhận giá trị tự động tăng, giá trị trường cập nhật sau khi chèn gây ra lỗi cột không xác định