Giả sử bạn muốn nhiều hơn chỉ là id của bài viết:
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'
Nếu tất cả những gì bạn muốn là id của bài viết thì hãy thử điều này:
SELECT article_id
FROM article_category
GROUP BY article_id
HAVING GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR ',') = '1,2'
Xem nó hoạt động tại http://sqlfiddle.com/#!2/9d213/4
Cũng cần nói thêm rằng ưu điểm của phương pháp này là nó có thể hỗ trợ việc kiểm tra bất kỳ số lượng danh mục nào mà không cần phải thay đổi truy vấn. Chỉ cần đặt '1,2' thành một biến chuỗi và thay đổi những gì được chuyển vào truy vấn. Vì vậy, bạn có thể dễ dàng tìm kiếm các bài báo có danh mục 1, 2 và 7 bằng cách chuyển một chuỗi '1,2,7'. Không cần kết hợp bổ sung.