2017-08-16 3 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') 

Diese SQL-Abfrage gibt nichts zurück. Aber wenn ich die Bedingungen einzeln/getrennt nachprüfte, ohne sie mit AND zusammen zu setzen, haben sie ein Rezept namens "Roast Beef", das eigentlich Rind und Knoblauch hat. Daher sollte es nicht als 1 Zeile im Ergebnis angezeigt werden. Aber es zeigt nichts. Warum?Dies gibt nichts zurück. Warum?

+0

Bitte versuchen Sie es unter SELECT Recipes.RecipeID, Recipes.RecipeTitle VON Rezepte INNER JOIN Recipe_Ingredients ON Recipes.RecipeID = Recipe_Ingredients.RecipeID INNER JOIN Zutaten auf Ingredients.IngredientID = Recipe_Ingredients.IngredientID WHERE Ingredients.IngredientName = 'Beef' und Ingredients.IngredientName = 'Garlic' –

+1

Ein Zutatenname kann unmöglich * Rindfleisch * UND * Knoblauch * gleichzeitig sein. Was bedeutet UND, wenn Sie es in einem Satz verwenden? –

+0

Ersetzen Sie "und" durch "oder" in Ihrer 'where' Klausel – Milk

Antwort

4

Es gibt NULL zurück, weil eine Zutat nicht zur gleichen Zeit Namen haben kann. Sie scheinen zu wollen:

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

AND arbeitet auf Zeilenebene. Der IngredientName kann nicht gleichzeitig 'Beef' und 'Garlic' für dieselbe Zeile sein. Möglicherweise müssen Sie sich erneut mit Ingredients verbinden.

0

Sie können nicht AND-Operator für Multi-Bedingung in der gleichen Spalte verwenden, wenn Sie 2 Bedingung für die gleiche Spalte verwenden möchten IN-Operator.

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'))