sql >> Databasteknik >  >> RDS >> Mysql

många-till-många och många-till-många korsningar

Om jag skulle lösa problemet kommer jag att sammanfoga de fyra tabellerna med deras länkkolumn (särskilt de främmande nycklarna ) sedan en underfråga på HAVING klausul för att räkna antalet poster på listan för varje person. Ge det här ett försök,

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



  1. SQL ersätter alla NULL

  2. Vänd i Oracle denna väg z/y/x till x/y/z

  3. Inkrementell datamaskering och mappning:Upptäcker ändringar och uppdaterar...

  4. Hämta rå SQL-frågesträng från PDO-förberedda satser