Prueba esto:
SELECT OrderID
FROM OrderDetailTable JOIN OrderedTable USING (ItemID)
GROUP BY OrderID
HAVING COUNT(DISTINCT ItemID) = (SELECT COUNT(DISTINCT ItemID) FROM OrderedTable)
La idea, en pocas palabras, es la siguiente:
- Cuente cuántas filas de OrderDetailTable coinciden con OrderedTable por ItemID,
- y luego compárelo con el número total de ItemID de OrderedTable.
Si estos dos números son iguales, el OrderID dado "contiene" todos los ItemID. Si uno es más pequeño que el otro, hay al menos un ItemID que no está contenido en el OrderID dado.
Dependiendo de sus claves principales, DISTINCT
puede no ser necesario (aunque no duele).