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

MySQL Seleccione dónde en muchos a muchos

Suponiendo que desea algo más que la identificación del artículo:

SELECT a.id
      ,a.other_stuff
  FROM articles a
  JOIN article_category ac
    ON ac.article_id = a.id
GROUP BY a.id
HAVING GROUP_CONCAT(DISTINCT ac.category_id ORDER BY ac.category_id SEPARATOR ',') = '1,2'

Si todo lo que desea es la identificación del artículo, intente esto:

SELECT article_id
  FROM article_category 
GROUP BY article_id
HAVING GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR ',') = '1,2'

Véalo en acción en http://sqlfiddle.com/#!2/9d213/4

También debería agregar que la ventaja de este enfoque es que puede admitir la verificación de cualquier número de categorías sin tener que cambiar la consulta. Simplemente convierta '1,2' en una variable de cadena y cambie lo que se pasa a la consulta. Por lo tanto, podría buscar fácilmente artículos con las categorías 1, 2 y 7 pasando una cadena de '1,2,7'. No se necesitan uniones adicionales.