SELECT u.*
FROM (
SELECT user_id
FROM tag t
JOIN user_has_tag uht
ON uht.tag_id = t.id
WHERE tag_name IN ('apple', 'orange', 'banana')
GROUP BY
user_id
HAVING COUNT(*) = 3
) q
JOIN user u
ON u.id = q.user_id
Genom att ta bort HAVING COUNT(*)
, får du OR
istället för AND
(även om det inte kommer att vara det mest effektiva sättet)
Genom att ersätta 3
med 2
, får du användare som har exakt två av tre taggar definierade.
Genom att ersätta = 3
med >= 2
, får du användare som har minst två av tre definierade taggar.