Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle obtient des lignes qui correspondent exactement à la liste de valeurs

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