sql >> Database >  >> RDS >> Mysql

Mysql veel op veel relatiequery. Hoe krijg ik alle tags van gefilterde berichten?

Dit is het beste wat ik kan bedenken om 04.30 uur:

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))

De (1, 2) zijn de tags die u zoekt en het aantal moet natuurlijk overeenkomen met het aantal tags dat u gebruikt om te filteren.

Hier is een voorbeeld (Merk op dat ik de gegevens enigszins heb gewijzigd)



  1. Alle uitgeschakelde CHECK-beperkingen in SQL Server retourneren (T-SQL-voorbeeld)

  2. Galera Cluster Recovery 101 - Een diepe duik in netwerkpartitionering

  3. java.sql.SQLException:Geen geschikt stuurprogramma gevonden voor localhost-test

  4. Snel mySQL-klassement met spelersrang (en omringende spelers)