Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête pour trouver des publications avec un ensemble exact de balises (relation plusieurs à plusieurs)

C'est un problème de division relationnelle exacte.

Dans SQL Server, un bien performant méthode (en supposant une contrainte unique sur post_id,tag ) est

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  

Je n'exclurais donc pas l'idée d'utiliser GROUP_CONCAT dans le HAVING à la place.

HAVING GROUP_CONCAT(DISTINCT Keyword ORDER BY Keyword) = 'clever,interesting'