C'est un problème de division relationnelle exacte.
Dans SQL Server, un bien performant
méthode (en supposant une contrainte unique sur post_id,tag
) est
SELECT post_id
FROM post_tags
GROUP BY post_id
HAVING MIN(CASE
WHEN Keyword IN ( 'clever', 'interesting' ) THEN 1
ELSE 0
END) = 1
AND SUM(CASE
WHEN Keyword IN ( 'clever', 'interesting' ) THEN 1
ELSE 0
END) = 2
Je n'exclurais donc pas l'idée d'utiliser GROUP_CONCAT
dans le HAVING
à la place.
HAVING GROUP_CONCAT(DISTINCT Keyword ORDER BY Keyword) = 'clever,interesting'