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

semplice sintassi dell'istruzione Oracle select

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

Puoi anche usare le raccolte per fare la stessa cosa:

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

OPPURE:

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

e se la riscrivi come funzione/procedura puoi passare la collezione come argomento e usare CARDINALITY() funzione piuttosto che codificare la dimensione della raccolta.

(Non ho testato queste ultime due query, quindi potrebbero esserci degli errori di battitura)