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

MySQL:Viele-zu-viele-Beziehung mit mehrfacher UND-Bedingung

Sie können Ihre aktuelle Abfrage leicht ändern, um die gewünschten Ergebnisse zu erhalten:

SELECT i.id, i.name    -- OK to select name assuming id is the PK
FROM item i
LEFT JOIN relation r
    ON i.id = r.item_id
LEFT JOIN tag t
    ON t.id = r.tag_id
WHERE t.tag IN ('sport', 'leather')
GROUP BY i.id
HAVING COUNT(DISTINCT t.tag) = 2;

Dies würde alle Artikel zurückgeben, die beide sport haben und leather Stichworte. Es funktioniert, indem es nach Element aggregiert (wie Sie es bereits getan haben), aber dann in einem HAVING bestätigt wird Klausel, dass es zwei unterschiedliche übereinstimmende Tags gibt. Da wir uns auf nur diese beiden Tags im WHERE beschränkt haben Klausel, wenn die HAVING Prüfung nach der Aggregation erfolgreich ist, impliziert dies, dass das Element eine Übereinstimmung ist.