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
Чрез премахване на HAVING COUNT(*)
, получавате OR
вместо AND
(въпреки че това няма да е най-ефективният начин)
Като замените 3
с 2
, получавате потребители, които имат точно два от три дефинирани маркера.
Като замените = 3
с >= 2
, получавате потребители, които имат поне два от три дефинирани маркера.