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

Mysql zapytanie o relacje wiele do wielu. Jak zdobyć wszystkie tagi przefiltrowanych postów?

Cóż, to najlepsze, co przychodzi mi do głowy o 4:30 rano:

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) to tagi, których szukasz, a ich liczba oczywiście będzie musiała odpowiadać liczbie tagów, których używasz do filtrowania.

Oto przykład (Zauważ, że nieznacznie zmieniłem dane)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NonUniqueObjectException podczas utrwalania obiektu

  2. Jak zwrócić tabelę za pomocą funkcji mysql?

  3. Zapytanie MySql dotyczące kombinacji AND i OR

  4. Funkcja IF w H2 dla kompatybilności MySQL

  5. Błąd zapytania SQL — kolumna nie może być pusta