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

viele-zu-viele und viele-zu-viele Schnittpunkte

Wenn ich das Problem lösen sollte, werde ich die vier Tabellen mit ihrer Verknüpfungsspalte verbinden (insbesondere die Fremdschlüssel ) dann eine Unterabfrage auf HAVING Klausel, um die Anzahl der Punkte auf der Liste für jede Person zu zählen. Probieren Sie es aus,

SET @personID := 1;

SELECT  c.name
FROM    Inventory a
        INNER JOIN Foods b
            ON a.food_id = b.id
        INNER JOIN Stores c
            ON a.store_id = c.id
        INNER JOIN Lists d
            ON d.food_id = b.id
WHERE   d.person_id = @personID
GROUP BY c.name
HAVING   COUNT(DISTINCT d.food_id) =
     (
        SELECT COUNT(*)
        FROM Lists
        WHERE person_ID = @personID
     )

SQLFiddle-Demo