En supposant que vous souhaitiez plus que l'identifiant de l'article :
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 tout ce que vous voulez, c'est l'identifiant de l'article, essayez ceci :
SELECT article_id
FROM article_category
GROUP BY article_id
HAVING GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR ',') = '1,2'
Voyez-le en action sur http://sqlfiddle.com/#!2/9d213/4
Il convient également d'ajouter que l'avantage de cette approche est qu'elle peut prendre en charge la vérification d'un nombre quelconque de catégories sans avoir à modifier la requête. Faites simplement de '1,2' une variable de chaîne et modifiez ce qui est transmis à la requête. Ainsi, vous pouvez tout aussi facilement rechercher des articles avec les catégories 1, 2 et 7 en passant une chaîne de '1,2,7'. Aucune jointure supplémentaire n'est nécessaire.