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

Consulta de relación mysql muchos a muchos. ¿Cómo obtener todas las etiquetas de publicaciones filtradas?

Bueno, esto es lo mejor que se me ocurre a las 4:30 a. m.:

SELECT distinct tag_id FROM
    (SELECT pt1.post_id FROM pt1
    INNER JOIN tags t1 ON (pt1.tag_id = t1.id)
    WHERE t1.id IN (1, 2)
    GROUP BY pt1.post_id
    HAVING COUNT(DISTINCT t1.id) = 2) MatchingPosts
INNER JOIN pt2 ON (MatchingPosts.post_id = pt2.post_id)
WHERE (pt2.tag_id NOT IN (1, 2))

(1, 2) son las etiquetas que está buscando y el recuento, por supuesto, tendrá que coincidir con la cantidad de etiquetas que está utilizando para filtrar.

Aquí hay un ejemplo (Observe que cambié ligeramente los datos)