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

MINUS trong MySQL?

Giả sử bảng Topic_Tags của bạn là duy nhất, thì bảng này trả lời chính xác của bạn câu hỏi - nhưng có thể không khái quát được vấn đề thực tế của bạn:

SELECT
  TopicId
FROM Topic_Tags
JOIN Tags ON
  Topic_Tags.TagId = Tags.TagId
WHERE
  Tags.Name IN ('A', 'B', 'C', 'D', 'E', 'F')
GROUP BY
  TopicId
HAVING
  COUNT(*) = 3 
  AND MAX(Tags.Name) = 'C'

Một giải pháp chung hơn sẽ là:

SELECT 
    * 
FROM (
    SELECT
        TopicId
    FROM Topic_Tags
    JOIN Tags ON
        Topic_Tags.TagId = Tags.TagId
    WHERE
        Tags.Name IN ('A', 'B', 'C')
    GROUP BY
        TopicId
    HAVING
        COUNT(*) = 3 
) as GoodTags
LEFT JOIN (
    SELECT
        TopicId
    FROM Topic_Tags
    JOIN Tags ON
        Topic_Tags.TagId = Tags.TagId
    WHERE
        Tags.Name = 'D'
        OR Tags.Name = 'E'
        OR Tags.Name = 'F'
) as BadTags ON
    GoodTags.TopicId = BadTags.TopicId
WHERE
    BadTags.TopicId IS NULL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP, MySQL - bạn có thể phân biệt giữa các hàng phù hợp và các hàng bị ảnh hưởng không?

  2. Gặp sự cố về múi giờ với PHP và MySQL

  3. Làm thế nào để thiết lập Collation trong cơ sở dữ liệu MySQL với Django 2. * mysqlclient?

  4. Các chỉ mục InnoDB trước và sau khi nhập

  5. Truy xuất các hàng được nhóm theo giờ với MySQL