Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta para encontrar postagens com um conjunto exato de tags (relação muitos para muitos)


Este é um problema de divisão relacional exato.

No SQL Server, um com bom desempenho método (assumindo restrição exclusiva em post_id,tag ) é
SELECT post_id
FROM   post_tags
GROUP  BY post_id
HAVING MIN(CASE
             WHEN Keyword IN ( 'clever', 'interesting' ) THEN 1
             ELSE 0
           END) = 1
       AND SUM(CASE
                 WHEN Keyword IN ( 'clever', 'interesting' ) THEN 1
                 ELSE 0
               END) = 2  

Então eu não descartaria a ideia de usar GROUP_CONCAT no HAVING em vez de.
HAVING GROUP_CONCAT(DISTINCT Keyword ORDER BY Keyword) = 'clever,interesting'