Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL SELECT mit m:n-Beziehung

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.