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

MySQL:mối quan hệ nhiều đến nhiều với nhiều điều kiện AND

Bạn có thể thay đổi một chút truy vấn hiện tại của mình để nhận được kết quả bạn muốn:

SELECT i.id, i.name    -- OK to select name assuming id is the PK
FROM item i
LEFT JOIN relation r
    ON i.id = r.item_id
LEFT JOIN tag t
    ON t.id = r.tag_id
WHERE t.tag IN ('sport', 'leather')
GROUP BY i.id
HAVING COUNT(DISTINCT t.tag) = 2;

Điều này sẽ trả về tất cả các mục có cả sportleather các thẻ. Nó hoạt động bằng cách tổng hợp theo mục (như bạn đã làm), nhưng sau đó xác nhận trong một HAVING mệnh đề có hai thẻ phù hợp riêng biệt. Vì chúng tôi chỉ giới hạn hai thẻ này trong WHERE mệnh đề nếu HAVING séc chuyển qua sau khi tổng hợp, điều đó ngụ ý rằng mục là một đối sánh.



  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ẤP với ký tự đại diện tên cơ sở dữ liệu trong MySQL?

  2. Cách tiêu chuẩn để lấy id chèn cuối cùng là gì?

  3. Làm thế nào để chuyển đổi một bảng SQL 500GB thành Apache Parquet?

  4. Mã hóa kép Django có phải là một chuỗi Unicode (utf-8?) Không?

  5. Các câu lệnh UPDATE ở trạng thái kết thúc truy vấn