SELECT name
FROM FRUIT
WHERE color IN ( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;
コレクションを使用して同じことを行うこともできます:
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 );
または:
SELECT name
FROM FRUIT
WHERE color MEMBER OF FruitColorTableType( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;
また、関数/プロシージャとして書き直す場合は、コレクションを引数として渡し、CARDINALITY()
を使用できます。 コレクションのサイズをハードコーディングするのではなく、機能します。
(これらの最後の2つのクエリはテストされていないため、タイプミスがある可能性があります)