Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle obtém linhas que correspondem exatamente à lista de valores


Tente isto:
SELECT OrderID 
FROM OrderDetailTable JOIN OrderedTable USING (ItemID)
GROUP BY OrderID 
HAVING COUNT(DISTINCT ItemID) = (SELECT COUNT(DISTINCT ItemID) FROM OrderedTable)

A ideia, resumidamente, é a seguinte:
  • Conte quantas linhas OrderDetailTable correspondem a OrderedTable por ItemID,
  • e compare isso com o número total de ItemIDs de OrderedTable.

Se esses dois números forem iguais, o OrderID fornecido "contém" todos os ItemIDs. Se um for menor que o outro, há pelo menos um ItemID não contido no OrderID fornecido.

Dependendo de suas chaves primárias, o DISTINCT pode não ser necessário (embora não doa).