Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MINUS w MySQL?

Zakładając, że Twoja tabela Topic_Tags jest unikalna, odpowiada to dokładnie pytanie - ale może nie być uogólnione na Twój rzeczywisty problem:

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'

Bardziej ogólnym rozwiązaniem byłoby:

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. MySQL sprawdza, czy tabela już istnieje

  2. AKTUALIZUJ lub WSTAW MySQL Python

  3. MySQL Select:WHERE (czas teraz) =BETWEEN tablevalue AND tablevalue

  4. Kiedy są najbardziej zalecane czasy użycia mysql_real_escape_string()

  5. problem w wielu związkach