SELECT name
FROM FRUIT
WHERE color IN ( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;
Sie könnten auch Sammlungen verwenden, um dasselbe zu tun:
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 );
ODER:
SELECT name
FROM FRUIT
WHERE color MEMBER OF FruitColorTableType( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;
und wenn Sie es als Funktion/Prozedur umschreiben, können Sie die Sammlung als Argument übergeben und die CARDINALITY()
verwenden funktionieren, anstatt die Größe der Sammlung fest zu codieren.
(Die letzten beiden Abfragen wurden nicht getestet, daher können einige Tippfehler enthalten sein)