У меня вопрос SQL. Я работаю со следующим набором таблиц:SQL ассоциативный вопрос вопрос
В таблице Рецепт содержит 5 рецептов, ингредиент содержит множество ингредиентов (52), и IngredientList ассоциативная организация, реализация многих-to многие отношения между Рецептом и Ингредиентом. RecipeID и IngredientID являются, по сути, идентификационными номерами с автоматическим увеличением.
Я пытаюсь написать запрос, который отображает все вегетарианские рецепты (то есть рецепты без
'%beef%',
'%pork%',
'%chicken%',
'%lamb%
в любой из связанных с ними Ingredient.Name). Проблема, с которой я сталкиваюсь, заключается в том, что набор результатов содержит одну строку на ингредиент, а не одну строку за рецепт.
Запрос, который генерирует этот набор результатов (обратите внимание, что таблица Ингредиент называется ингредиенты здесь):
SELECT recipe.name AS Dish, ingredients.name
FROM (recipe JOIN ingredientlist ON recipe.recipeid=ingredientlist.recipeid
JOIN ingredients ON ingredientlist.ingredientid=ingredients.ingredientid)
WHERE ingredients.name NOT LIKE '%beef%'
AND ingredients.name NOT LIKE '%chicken%'
AND ingredients.name NOT LIKE '%pork%'
AND ingredients.name NOT LIKE '%lamb%';
Этот запрос генерирует 50 результатов (не 52, потому что два компонента исключены на основе их ингредиентов. имя, содержащее подстроку, исключенную моим предложением WHERE).
Моя цель - вернуть 3 из 5 названий рецептов в таблице рецептов (вычитая те, которые содержат мясо в связанных ингредиентах. Имя).
Должно быть помечено как «Домашнее задание», – Timothy