Supponendo che tu voglia qualcosa di più del semplice ID dell'articolo:
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'
Se tutto ciò che desideri è l'ID dell'articolo, prova questo:
SELECT article_id
FROM article_category
GROUP BY article_id
HAVING GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR ',') = '1,2'
Guardalo in azione su http://sqlfiddle.com/#!2/9d213/4
Dovrebbe anche aggiungere che il vantaggio di questo approccio è che può supportare il controllo di un numero qualsiasi di categorie senza dover modificare la query. Basta rendere '1,2' una variabile stringa e modificare ciò che viene passato nella query. Quindi, puoi cercare facilmente gli articoli con le categorie 1, 2 e 7 passando una stringa di "1,2,7". Non sono necessari ulteriori join.