sql >> Base de Datos >  >> RDS >> Oracle

Oracle obtiene filas que coinciden exactamente con la lista de valores

Prueba esto:

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

La idea, en pocas palabras, es la siguiente:

  • Cuente cuántas filas de OrderDetailTable coinciden con OrderedTable por ItemID,
  • y luego compárelo con el número total de ItemID de OrderedTable.

Si estos dos números son iguales, el OrderID dado "contiene" todos los ItemID. Si uno es más pequeño que el otro, hay al menos un ItemID que no está contenido en el OrderID dado.

Dependiendo de sus claves principales, DISTINCT puede no ser necesario (aunque no duele).