Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle erhält Zeilen, die genau mit der Werteliste übereinstimmen

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).