我刚接触MySql编程,我正在创建一个项目来提升我的技能。
我有一个名为tblRecipe
的表,其中包含RecipeId, RecipeName and Instructions
列。另一个表名为tblIngredients
,其中包含IngredientId,RecipeId, IngredientName
列。
现在,例如,RecipeOne需要IngredientOne和IngredientTwo来制作,RecipeTwo需要IngredientOne,IngredientTwo和IngredientThree来制作。 我的程序要求IngredientNames输入,所以当我输入IngredientOne和IngredientTwo它应该给我回到结果RecipeOne。
这是我的代码
Select Recipename,Instructions
from tblREcipe where RecipeId in
(select recipeID
from tblIngredients
where Ingredientname in('IngredientOne','IngredientTWo')
);
我知道IN运算符就像是说匹配以下任何一个。 因此,使用该代码,它给了我两个食谱。 我正在寻找相当于AND。 我试过“Ingredientname = ALL(in('IngredientOne','IngredientTwo'))” 但它不会返回任何行。
我可以接受任何更改,例如重组表格,如果这样可以解决问题,因为这只是一个练习项目。希望很快收到你的回复,并提前感谢你。
答案 0 :(得分:1)
您还需要count
与成分数匹配的记录实例数。如下所示:
Select a.Recipename,
a.Instructions
FROM tblREcipe a INNER JOIN
(
SELECT recipeID,
COUNT(IngredientId)
FROM tblIngredients
WHERE Ingredientname IN ('IngredientOne', 'IngredientTWo')
GROUP BY recipeID
HAVING COUNT(IngredientId) = 2 -- the number of ingredients
-- should somehow dynamic
) b ON a.recipeID = b.recipeID