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

Find a value which contains in ALL rows of a table

我需要 select table 的所有行中包含的所有值。
我有 table “Ingredient” 和 ProductIngredient(我有产品的配方)。
成分

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

产品成分。

| 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 );

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

这将为您提供 I 中每种产品的 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)