Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

interseções muitos-para-muitos e muitos-para-muitos


Se eu resolvesse o problema, juntaria as quatro tabelas com sua coluna de ligação (especificamente as chaves estrangeiras ) então uma subconsulta no HAVING cláusula para contar o número de itens na lista para cada pessoa. Experimente isso,
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
     )

Demonstração do SQLFiddle