Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle ottiene righe che corrispondono esattamente all'elenco di valori

Prova questo:

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

L'idea, in poche parole, è la seguente:

  • Conta quante righe OrderDetailTable corrispondono a OrderedTable per ItemID,
  • e quindi confrontalo con il numero totale di ItemID da OrderedTable.

Se questi due numeri sono uguali, il dato OrderID "contiene" tutti gli ItemID. Se uno è più piccolo dell'altro, c'è almeno un ItemID non contenuto nell'OrdineID specificato.

A seconda delle tue chiavi primarie, il DISTINCT potrebbe non essere necessario (anche se non fa male).