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
Durch Entfernen von HAVING COUNT(*)
, erhalten Sie OR
statt AND
(obwohl es nicht der effizienteste Weg sein wird)
Durch Ersetzen von 3
mit 2
erhalten Sie Benutzer, für die genau zwei von drei Tags definiert sind.
Durch Ersetzen von = 3
mit >= 2
erhalten Sie Benutzer, für die mindestens zwei von drei Tags definiert sind.