Mysql
 sql >> Base de données >  >> RDS >> Mysql

intersections plusieurs-à-plusieurs et plusieurs-à-plusieurs

Si je devais résoudre le problème, je joindrais les quatre tables avec leur colonne de liaison (spécifiquement les clés étrangères ) puis une sous-requête sur le HAVING clause pour compter le nombre d'éléments sur la liste pour chaque personne. Essayez ceci,

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
     )

Démo SQLFiddle