Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL SELECT z relacją 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

Usuwając HAVING COUNT(*) , otrzymasz OR zamiast AND (choć nie będzie to najskuteczniejszy sposób)

Zastępując 3 z 2 , otrzymujesz użytkowników, którzy mają dokładnie dwa z trzech zdefiniowanych tagów.

Zastępując = 3 z >= 2 , otrzymasz użytkowników, którzy mają co najmniej dwa z trzech zdefiniowanych tagów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. aktualizacja mysql z regexp

  2. Dlaczego liczność indeksu w MySQL pozostaje niezmieniona po dodaniu nowego indeksu?

  3. Proste zrozumienie błędów MySQL

  4. UPDATE składnia z ORDER BY, LIMIT i wieloma tabelami

  5. Błąd MySQL 1118 (za duży rozmiar wiersza) podczas przywracania bazy danych Django-mailer