1

我只是 MySql 编程的新手,我正在创建一个项目来提高我的技能。我有一个名为tblRecipe列的表RecipeId, RecipeName and Instructions。另一个表被称为tblIngredients具有列IngredientId,RecipeId, IngredientName

现在例如,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'))”,但它没有返回任何行。

如果这只是一个练习项目,我愿意接受任何更改,例如重组表格,因为这只是一个练习项目。希望很快收到你们的消息,并提前谢谢你们。

4

1 回答 1

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
于 2012-08-10T08:47:35.473 回答