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
En supprimant HAVING COUNT(*)
, vous obtenez OR
au lieu de AND
(même si ce ne sera pas le moyen le plus efficace)
En remplaçant 3
avec 2
, vous obtenez des utilisateurs qui ont défini exactement deux balises sur trois.
En remplaçant = 3
avec >= 2
, vous obtenez des utilisateurs qui ont au moins deux balises sur trois définies.