2012-08-10 76 views
1

我只是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'))” 但它不返回任何行。

我可以开放任何改变,如重组表格,如果解决了这个问题,因为这只是一个实践项目。希望尽快收到您的来信,并提前感谢您。

回答

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 
+0

谢谢我试过了,它工作。 – user1589687 2012-08-12 07:57:52

相关问题