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

sintaxis simple de declaración de selección de Oracle

SELECT name
FROM   FRUIT
WHERE  color IN ( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;

También podría usar colecciones para hacer lo mismo:

CREATE FruitColorTableType AS TABLE OF FRUIT.COLOR%TYPE;
/

SELECT DISTINCT
       Name
FROM   FRUIT f
WHERE  FruitColorTableType( 'Red', 'Green' )
       SUBMULTISET OF
       CAST( MULTISET(
         SELECT Color
         FROM   FRUIT c
         WHERE  c.name = f.name
       ) AS FruitColorTableType );

O:

SELECT name
FROM   FRUIT
WHERE  color MEMBER OF FruitColorTableType( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;

y si lo reescribe como una función/procedimiento, puede pasar la colección como un argumento y usar CARDINALITY() función en lugar de codificar el tamaño de la colección.

(No se probaron estas dos últimas consultas, por lo que puede haber algunos errores tipográficos)