Mysql
 sql >> база данни >  >> RDS >> Mysql

МИНУС в MySQL?

Ако приемем, че вашата таблица Topic_Tags е уникална, това отговаря на точния ви въпрос - но може да не се обобщава за действителния ви проблем:

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'

По-общо решение би било:

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 не винаги използва обединяване на индекси тук?

  2. Как да съхранявате повтарящи се дати, като имате предвид лятното часово време

  3. Как мога да съхранявам паролата сигурно в MySQL и да се удостоверя за външни услуги

  4. Връзката е отказана с MySQL на laravel и MAMP

  5. Изображения в MySQL