Za předpokladu, že chcete víc než jen ID článku:
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'
Pokud chcete pouze ID článku, zkuste toto:
SELECT article_id
FROM article_category
GROUP BY article_id
HAVING GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR ',') = '1,2'
Podívejte se na to v akci na http://sqlfiddle.com/#!2/9d213/4
Je třeba také dodat, že výhodou tohoto přístupu je, že může podporovat kontrolu libovolného počtu kategorií, aniž by bylo nutné měnit dotaz. Jednoduše vytvořte '1,2' řetězcovou proměnnou a změňte to, co se předává do dotazu. Takže můžete stejně snadno vyhledávat články s kategoriemi 1, 2 a 7 zadáním řetězce '1,2,7'. Nejsou potřeba žádná další připojení.