Essayez ceci :
SELECT OrderID
FROM OrderDetailTable JOIN OrderedTable USING (ItemID)
GROUP BY OrderID
HAVING COUNT(DISTINCT ItemID) = (SELECT COUNT(DISTINCT ItemID) FROM OrderedTable)
L'idée, en quelques mots, est la suivante :
- Compter le nombre de lignes OrderDetailTable correspondant à OrderedTable par ItemID,
- puis comparez cela au nombre total d'ItemIDs de OrderedTable.
Si ces deux nombres sont égaux, le OrderID donné "contient" tous les ItemIDs. Si l'un est plus petit que l'autre, il y a au moins un ItemID non contenu dans le OrderID donné.
Selon vos clés primaires, le DISTINCT
peut ne pas être nécessaire (même si cela ne fait pas de mal).