sql >> Databasteknik >  >> RDS >> Mysql

SQL SELECT med m:n relation

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

Genom att ta bort HAVING COUNT(*) , får du OR istället för AND (även om det inte kommer att vara det mest effektiva sättet)

Genom att ersätta 3 med 2 , får du användare som har exakt två av tre taggar definierade.

Genom att ersätta = 3 med >= 2 , får du användare som har minst två av tre definierade taggar.



  1. Hur ändrar jag databasnamnet med MySQL?

  2. Alternativ för justering av prestanda för Azure SQL Database

  3. Vilka index för att förbättra prestanda för JOIN och GROUP BY

  4. Beräkna exekveringstiden för en Mysql-fråga baserat på antalet poster