Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQL SELECT avec relation m:n

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.