Se não houver restrições exclusivas, tente:
SELECT post_id
FROM tags
WHERE tag_id = 1 OR tag_id = 3
GROUP BY post_id
HAVING count(DISTINCT tag_id) = 2;
Ou use este
HAVING
cláusula, se tentar detectar apenas dois tag_id
valores:HAVING MIN(tag_id) <> MAX(tag_id)
Se post_id e tag_id tiverem uma restrição exclusiva, isso também deve funcionar:
SELECT post_id
FROM tags
WHERE tag_id = 1 OR tag_id = 3
GROUP BY post_id
HAVING count(*) = 2;