Mysql
 sql >> Database >  >> RDS >> Mysql

Query per trovare post con un set esatto di tag (relazione molti-a-molti)

Questo è un esatto problema di divisione relazionale.

In SQL Server un ottimo rendimento metodo (assumendo un vincolo univoco su 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  

Quindi non escluderei l'idea di usare GROUP_CONCAT nel HAVING invece.

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