Oracle 从一对多表中至少选择A和B

Oracle 从一对多表中至少选择A和B,oracle,plsql,Oracle,Plsql,我有一个与颜色表相关的产品表 一个产品可以有多种颜色。。。 产品A:有红、绿、蓝、黄三种颜色 如何选择至少包含红色和绿色动态的产品 例如: Product: RED GREEN - PASS Product: RED GREEN YELLOW - PASS Product: RED YELLOW - FAIL 只喜欢联接表解决方案或独立子查询 这个问题与 我正试图从基本面解决这个问题 提前感谢像这样的东西应该可以用 SELECT product.name FROM product

我有一个与颜色表相关的产品表

一个产品可以有多种颜色。。。 产品A:有红、绿、蓝、黄三种颜色

如何选择至少包含红色和绿色动态的产品

例如:

Product: RED GREEN - PASS
Product: RED GREEN YELLOW - PASS
Product: RED YELLOW - FAIL
只喜欢联接表解决方案或独立子查询

这个问题与

我正试图从基本面解决这个问题


提前感谢

像这样的东西应该可以用

SELECT product.name
  FROM product
       JOIN color USING (product_id)
 WHERE color.name IN ('red', 'green')
 GROUP BY product.name
HAVING COUNT(DISTINCT color.name) = 2
其中HAVING子句指定列表中的项目数。因此,如果您想要红色、绿色和黄色的产品,您可以将查询更改为

SELECT product.name
  FROM product
       JOIN color USING (product_id)
 WHERE color.name IN ('red', 'green', 'yellow')
 GROUP BY product.name
HAVING COUNT(DISTINCT color.name) = 3

像这样的东西应该有用

SELECT product.name
  FROM product
       JOIN color USING (product_id)
 WHERE color.name IN ('red', 'green')
 GROUP BY product.name
HAVING COUNT(DISTINCT color.name) = 2
其中HAVING子句指定列表中的项目数。因此,如果您想要红色、绿色和黄色的产品,您可以将查询更改为

SELECT product.name
  FROM product
       JOIN color USING (product_id)
 WHERE color.name IN ('red', 'green', 'yellow')
 GROUP BY product.name
HAVING COUNT(DISTINCT color.name) = 3