Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Abfrage, um Beiträge mit einem genauen Satz von Tags zu finden (Viele-zu-Viele-Beziehung)

Dies ist ein exaktes relationales Divisionsproblem.

In SQL Server ein gut performend Methode (unter der Annahme einer eindeutigen Einschränkung für post_id,tag ) ist

SELECT post_id
FROM   post_tags
GROUP  BY post_id
HAVING MIN(CASE
             WHEN Keyword IN ( 'clever', 'interesting' ) THEN 1
             ELSE 0
           END) = 1
       AND SUM(CASE
                 WHEN Keyword IN ( 'clever', 'interesting' ) THEN 1
                 ELSE 0
               END) = 2  

Daher würde ich die Verwendung von GROUP_CONCAT nicht ausschließen im HAVING stattdessen.

HAVING GROUP_CONCAT(DISTINCT Keyword ORDER BY Keyword) = 'clever,interesting'