查找包含在表的所有行中的值

时间:2017-11-27 21:27:36

标签: sql postgresql relational-division

我需要选择表格所有行中包含的所有值 我有表“成分”和ProductIngredient(我有一个产品的配方) 成分

| ingredient_id | name | price | 
| 1             | Bla  | 100   
| 2             | foo  | 50

ProductIngredient。

| Product_id | ingredient_id
| 1          | 1   
| 1          | 2   
| 2          | 1

输出应为

|  1   |  Bla |  

因为它存在于ProductIngredient的所有行中。

SELECT DISTINCT Ingredient_Id 
FROM Ingredients I
WHERE Ingredient_Id = ALL
    (SELECT Ingredient_id FROM ProductIngredient PI
     WHERE PI.Ingredient_Id = I.Ingredient_Id );

如何修复代码以使其正常工作?

1 个答案:

答案 0 :(得分:1)

这将为您提供每种产品的PI中的所有成分。这假设每种产品没有多行用于产品和成分组合。

SELECT I.Ingredient_Id 
FROM Ingredients I INNER JOIN ProductIngredient PI
     ON PI.Ingredient_Id = I.Ingredient_Id
GROUP BY I.Ingredient_Id
HAVING COUNT(*) >= (SELECT COUNT(DISTINCT Product_id) FROM ProductIngredient)