sql >> Databáze >  >> RDS >> Mysql

SQL SELECT se vztahem 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

Odebráním HAVING COUNT(*) , dostanete OR místo AND (ačkoli to nebude nejefektivnější způsob)

Nahrazením 3 s 2 , získáte uživatele, kteří mají definované přesně dva ze tří tagů.

Nahrazením = 3 s >= 2 , získáte uživatele, kteří mají definované alespoň dva ze tří tagů.



  1. php:SQLSTATE[HY000] [2002] Nebylo možné navázat spojení, protože jej cílový počítač aktivně odmítl

  2. MySQL, KDE RÁD nepracuje s více poli pomocí php a pdo bind

  3. Problémy s připojením k serveru mysql:ERROR 2003 (HY000)

  4. Group_Concat v Concat nefunguje s hodnotami NULL