SELECT name
FROM FRUIT
WHERE color IN ( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;
Du kan också använda samlingar för att göra samma sak:
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 );
ELLER:
SELECT name
FROM FRUIT
WHERE color MEMBER OF FruitColorTableType( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;
och om du skriver om det som en funktion/procedur kan du skicka in samlingen som ett argument och använda CARDINALITY()
funktion snarare än att hårdkoda storleken på samlingen.
(Testade inte de två sista frågorna så det kan finnas några stavfel)