Ervan uitgaande dat u meer wilt dan alleen de id van het artikel:
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'
Als je alleen de ID van het artikel wilt, probeer dan dit:
SELECT article_id
FROM article_category
GROUP BY article_id
HAVING GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR ',') = '1,2'
Zie het in actie op http://sqlfiddle.com/#!2/9d213/4
Moet er ook aan toevoegen dat het voordeel van deze aanpak is dat het het controleren van een willekeurig aantal categorieën kan ondersteunen zonder de query te hoeven wijzigen. Maak gewoon '1,2' een stringvariabele en verander wat er in de query wordt doorgegeven. U kunt dus net zo gemakkelijk artikelen zoeken met de categorieën 1, 2 en 7 door een string van '1,2,7' door te geven. Er zijn geen extra joins nodig.