Prova questo:
SELECT OrderID
FROM OrderDetailTable JOIN OrderedTable USING (ItemID)
GROUP BY OrderID
HAVING COUNT(DISTINCT ItemID) = (SELECT COUNT(DISTINCT ItemID) FROM OrderedTable)
L'idea, in poche parole, è la seguente:
- Conta quante righe OrderDetailTable corrispondono a OrderedTable per ItemID,
- e quindi confrontalo con il numero totale di ItemID da OrderedTable.
Se questi due numeri sono uguali, il dato OrderID "contiene" tutti gli ItemID. Se uno è più piccolo dell'altro, c'è almeno un ItemID non contenuto nell'OrdineID specificato.
A seconda delle tue chiavi primarie, il DISTINCT
potrebbe non essere necessario (anche se non fa male).