Inner Join возвращает неверное количество результатов - PullRequest
0 голосов
/ 16 февраля 2020

Мой запрос возвращает 54 строки, когда он должен вернуть 59. Мне кажется, что мне нужно только внутреннее объединение, потому что я не хотел бы включать значения NULL в мои результаты. Я также попытался сделать левые внешние соединения, чтобы отфильтровать некоторые несоответствующие значения, но он возвращает слишком много результатов (62). Я использую DISTINCT, поэтому дубликаты не должны быть проблемой.

Запрос, который я пытаюсь создать:

"Список всех классов ингредиентов и названия любых рецептов, которые используют по крайней мере один компонент этого класса, если есть. Удалите все дубликаты. (2 столбца, 59 строк) "

Мой код:

select DISTINCT Ingredients.IngredientClassID, Recipes.RecipeTitle
from Ingredients
Inner join Recipe_Ingredients on Ingredients.IngredientID = 
Recipe_Ingredients.IngredientID
Inner join Recipes on Recipe_Ingredients.RecipeID = Recipes.RecipeID;

Ссылка на настройку БД Fiddle I

Схема базы данных: enter image description here

1 Ответ

1 голос
/ 16 февраля 2020

Я думаю, что 54 строки - это правильный вывод. Мой запрос дал одинаковое количество строк.

FROM Ingredient_Classes ic
    LEFT JOIN Ingredients i ON i.IngredientClassID = ic.IngredientClassID
    LEFT JOIN Recipe_Ingredients ri ON ri.ingredientId = i.ingredientId
    JOIN recipes r ON r.recipeid = ri.recipeId
WHERE i.ingredientId IS NOT NULL
GROUP BY ic.IngredientClassDescription, r.recipetitle
ORDER BY recipetitle;

Вы можете выбрать разные (recipe.title) и увидеть, что все рецепты присутствуют в выводе. Поэтому я не думаю, что мы что-то пропустили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...