Versuchen Sie Folgendes:
SELECT OrderID
FROM OrderDetailTable JOIN OrderedTable USING (ItemID)
GROUP BY OrderID
HAVING COUNT(DISTINCT ItemID) = (SELECT COUNT(DISTINCT ItemID) FROM OrderedTable)
Die Idee ist kurz gesagt wie folgt:
- Zählen Sie, wie viele OrderDetailTable-Zeilen mit OrderedTable nach ItemID übereinstimmen,
- und vergleichen Sie das dann mit der Gesamtzahl der ItemIDs aus OrderedTable.
Wenn diese beiden Zahlen gleich sind, "enthält" die angegebene OrderID alle ItemIDs. Ist die eine kleiner als die andere, ist mindestens eine ItemID nicht in der angegebenen OrderID enthalten.
Abhängig von Ihren Primärschlüsseln wird der DISTINCT
ist möglicherweise nicht erforderlich (obwohl es nicht weh tut).