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)