1

私はMySqlプログラミングに不慣れで、私のスキルを高めるためのプロジェクトを作成しています。tblRecipe列を持つというテーブルがありますRecipeId, RecipeName and InstructionstblIngredients列を持つもう1つのテーブルが呼び出されます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'))」を試しましたが、行が返されません。

これは単なる練習プロジェクトであるため、問題が解決した場合は、テーブルの再構築などの変更を受け入れることができます。お早めにご連絡いただき、よろしくお願いいたします。

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 に答える