Angenommen, Sie möchten mehr als nur die ID des Artikels:
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'
Wenn Sie nur die ID des Artikels wollen, versuchen Sie Folgendes:
SELECT article_id
FROM article_category
GROUP BY article_id
HAVING GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR ',') = '1,2'
Sehen Sie es in Aktion unter http://sqlfiddle.com/#!2/9d213/4
Es sollte auch hinzugefügt werden, dass der Vorteil dieses Ansatzes darin besteht, dass er die Überprüfung einer beliebigen Anzahl von Kategorien unterstützen kann, ohne dass die Abfrage geändert werden muss. Machen Sie einfach '1,2' zu einer String-Variablen und ändern Sie, was an die Abfrage übergeben wird. Sie können also genauso einfach nach Artikeln mit den Kategorien 1, 2 und 7 suchen, indem Sie die Zeichenfolge „1,2,7“ übergeben. Es sind keine zusätzlichen Verknüpfungen erforderlich.