Prova detta:
SELECT OrderID
FROM OrderDetailTable JOIN OrderedTable USING (ItemID)
GROUP BY OrderID
HAVING COUNT(DISTINCT ItemID) = (SELECT COUNT(DISTINCT ItemID) FROM OrderedTable)
Idén, i ett nötskal, är följande:
- Räkna hur många OrderDetailTable-rader som matchar OrderedTable efter ItemID,
- och jämför sedan det med det totala antalet artikel-ID från OrderedTable.
Om dessa två siffror är lika, "innehåller" det givna OrderID alla ItemIDs. Om den ena är mindre än den andra, finns det minst ett artikel-ID som inte finns i det angivna order-ID.
Beroende på dina primärnycklar, DISTINCT
kanske inte är nödvändigt (även om det inte gör ont).