2017-08-16 6 views
2
SELECT 
    Recipes.RecipeID, Recipes.RecipeTitle 
FROM 
    Recipes 
INNER JOIN 
    Recipe_Ingredients ON Recipes.RecipeID = Recipe_Ingredients.RecipeID 
INNER JOIN 
    Ingredients ON Ingredients.IngredientID = Recipe_Ingredients.IngredientID 
WHERE 
    (Ingredients.IngredientName = 'Beef') 
    AND (Ingredients.IngredientName = 'Garlic') 

このSQLクエリは何も返しません。しかし、ANDと一緒に置かないで個別に/別々に条件をチェックしたとき、実際に肉牛とニンニクの両方を持つ "ローストビーフ"というレシピが出てきます。したがって、結果に1行表示されるべきではありません。しかし、それは何も表示されません。どうして?これは何も返しません。どうして?

+0

Recipes.RecipeID = Recipe_Ingredients.RecipeID INNER ON Recipe_IngredientsがIngredients.IngredientID = Recipe_Ingredients.IngredientID Ingredients.IngredientName = 'ビーフ' に関する成分のJOIN JOINのレシピINNER FROM SELECT Recipes.RecipeID、Recipes.RecipeTitle下回ってみてください。 Ingredients.IngredientName = 'Garlic' –

+1

成分名は* Beef * AND * Garlic *にすることはできません。あなたが文章でそれを使うとき、とはどういう意味ですか? –

+0

'と'を 'where'節で' or'に置き換えてください – Milk

答えて

4

成分は同時に名前を持つことができないので、NULLを返しています。

SELECT r.RecipeID, r.RecipeTitle 
FROM Recipes r INNER JOIN 
    Recipe_Ingredients ri 
    ON r.RecipeID = ri.RecipeID INNER JOIN 
    Ingredients i 
    ON i.IngredientID = ri.IngredientID 
WHERE i.IngredientName IN ('Beef', 'Garlic') 
GROUP BY r.RecipeID, r.RecipeTitle 
HAVING COUNT(DISTINCT i.IngredientName) = 2; 
0

行レベルで動作します。 IngredientNameは、同じ行の 'Beef'と 'Garlic'の両方に同時に指定することはできません。あなたは再び成分と一緒に参加しなければならないかもしれません。

0

同じ列の複数の条件に対してAND演算子を使用することはできません。同じ列に対して2つの条件を選択する場合は、IN演算子を使用します。

SELECT Recipes.RecipeID, Recipes.RecipeTitle 
FROM Recipes INNER JOIN 
Recipe_Ingredients ON Recipes.RecipeID = Recipe_Ingredients.RecipeID 
INNER JOIN 
Ingredients ON Ingredients.IngredientID = Recipe_Ingredients.IngredientID 
WHERE (Ingredients.IngredientName in ('Beef' , 'Garlic')) 
関連する問題