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

Dotaz na vztah Mysql many to many. Jak získat všechny značky filtrovaných příspěvků?

No, tohle je to nejlepší, co mě ve 4:30 napadlo:

SELECT distinct tag_id FROM
    (SELECT pt1.post_id FROM pt1
    INNER JOIN tags t1 ON (pt1.tag_id = t1.id)
    WHERE t1.id IN (1, 2)
    GROUP BY pt1.post_id
    HAVING COUNT(DISTINCT t1.id) = 2) MatchingPosts
INNER JOIN pt2 ON (MatchingPosts.post_id = pt2.post_id)
WHERE (pt2.tag_id NOT IN (1, 2))

(1, 2) jsou značky, které hledáte, a jejich počet se samozřejmě musí shodovat s množstvím značek, které používáte k filtrování.

Zde je příklad (Všimněte si, že jsem mírně změnil data)



  1. Spouštěč MySQL po vložení a po aktualizaci

  2. Jak napsat více sloupců v klauzuli pomocí sqlalchemy

  3. Optimalizované SQL pro stromové struktury

  4. REPLACE versus INSERT v SQL