SELECT name
FROM FRUIT
WHERE color IN ( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;
U kunt ook verzamelingen gebruiken om hetzelfde te doen:
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 );
OF:
SELECT name
FROM FRUIT
WHERE color MEMBER OF FruitColorTableType( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;
en als je het herschrijft als een functie/procedure, kun je de verzameling doorgeven als argument en de CARDINALITY()
gebruiken functie in plaats van de grootte van de collectie hard te coderen.
(Deze laatste twee zoekopdrachten niet getest, dus er kunnen wat typefouten zijn)