Spróbuj tego:
SELECT OrderID
FROM OrderDetailTable JOIN OrderedTable USING (ItemID)
GROUP BY OrderID
HAVING COUNT(DISTINCT ItemID) = (SELECT COUNT(DISTINCT ItemID) FROM OrderedTable)
Pomysł, w skrócie, jest następujący:
- Policz, ile wierszy OrderDetailTable pasuje do OrderedTable według ItemID,
- a następnie porównaj to z całkowitą liczbą ItemIDs z OrderedTable.
Jeśli te dwie liczby są równe, to podane OrderID "zawiera" wszystkie ItemIDs. Jeśli jeden jest mniejszy od drugiego, istnieje co najmniej jeden ItemID nie zawarty w danym OrderID.
W zależności od kluczy podstawowych, DISTINCT
może nie być konieczne (choć to nie boli).