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

MySQL:relación de muchos a muchos con múltiples condiciones AND

Puede modificar ligeramente su consulta actual para obtener los resultados que desea:

SELECT i.id, i.name    -- OK to select name assuming id is the PK
FROM item i
LEFT JOIN relation r
    ON i.id = r.item_id
LEFT JOIN tag t
    ON t.id = r.tag_id
WHERE t.tag IN ('sport', 'leather')
GROUP BY i.id
HAVING COUNT(DISTINCT t.tag) = 2;

Esto devolvería todos los artículos que tienen tanto sport y leather etiquetas Funciona agregando por elemento (como ya lo estaba haciendo), pero luego afirmando en un HAVING cláusula de que hay dos etiquetas coincidentes distintas. Dado que restringimos solo estas dos etiquetas en WHERE cláusula, si HAVING la verificación pasa después de la agregación, implica que el elemento es una coincidencia.