Tente isto:
SELECT OrderID
FROM OrderDetailTable JOIN OrderedTable USING (ItemID)
GROUP BY OrderID
HAVING COUNT(DISTINCT ItemID) = (SELECT COUNT(DISTINCT ItemID) FROM OrderedTable)
A ideia, resumidamente, é a seguinte:
- Conte quantas linhas OrderDetailTable correspondem a OrderedTable por ItemID,
- e compare isso com o número total de ItemIDs de OrderedTable.
Se esses dois números forem iguais, o OrderID fornecido "contém" todos os ItemIDs. Se um for menor que o outro, há pelo menos um ItemID não contido no OrderID fornecido.
Dependendo de suas chaves primárias, o
DISTINCT
pode não ser necessário (embora não doa).