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
Dengan menghapus HAVING COUNT(*)
, Anda mendapatkan OR
bukannya AND
(meskipun itu bukan cara yang paling efisien)
Dengan mengganti 3
dengan 2
, Anda mendapatkan pengguna yang memiliki tepat dua dari tiga tag yang ditentukan.
Dengan mengganti = 3
dengan >= 2
, Anda mendapatkan pengguna yang memiliki setidaknya dua dari tiga tag yang ditentukan.