查找包含在 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)
我需要 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)