Oracle
 sql >> Base de données >  >> RDS >> Oracle

syntaxe d'instruction de sélection Oracle simple

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

Vous pouvez également utiliser des collections pour faire la même chose :

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

OU :

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

et si vous le réécrivez en tant que fonction/procédure, vous pouvez passer la collection en tant qu'argument et utiliser le CARDINALITY() plutôt que de coder en dur la taille de la collection.

(Pas testé ces deux dernières requêtes donc il peut y avoir des fautes de frappe)