sql >> Base de Datos >  >> RDS >> Mysql

Consulta para encontrar publicaciones con un conjunto exacto de etiquetas (relación de muchos a muchos)

Este es un problema de división relacional exacta.

En SQL Server, un buen rendimiento método (suponiendo una restricción única en post_id,tag ) es

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  

Así que no descartaría la idea de usar GROUP_CONCAT en el HAVING en su lugar.

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