SELECT name
FROM FRUIT
WHERE color IN ( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;
Bạn cũng có thể sử dụng bộ sưu tập để làm điều tương tự:
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 );
HOẶC:
SELECT name
FROM FRUIT
WHERE color MEMBER OF FruitColorTableType( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;
và nếu bạn viết lại nó dưới dạng một hàm / thủ tục, bạn có thể chuyển bộ sưu tập vào dưới dạng đối số và sử dụng CARDINALITY()
chứ không phải mã hóa khó kích thước của bộ sưu tập.
(Chưa kiểm tra hai truy vấn cuối cùng này nên có thể có một số lỗi chính tả)