从一个到多个表中选择至少A和B.

时间:2012-07-10 23:44:26

标签: oracle plsql

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

产品可以有多种颜色...... exp:产品A:有红色,绿色,蓝色,黄色。

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

示例:

Product: RED GREEN - PASS
Product: RED GREEN YELLOW - PASS
Product: RED YELLOW - FAIL

仅选择联接表解决方案或独立子查询

这个问题与此有关 One to Many search using AND condition

我正试图从基本面解决它。

提前致谢

1 个答案:

答案 0 :(得分:4)

这样的事情应该有效

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