У меня вопрос по SQL. Я работаю со следующим набором таблиц:
http://imgur.com/eg19r.png
Таблица рецептов содержит 5 рецептов, Ingredient содержит много ингредиентов (52), а IngredientList - это ассоциативная сущность, реализация отношения «многие ко многим» между Recipe и Ingredient. RecipeID и IngredientID - это, по сути, номера с автоматическим приращением.
Я пытаюсь написать запрос, который отображает все вегетарианские рецепты (то есть рецепты без
'%beef%',
'%pork%',
'%chicken%',
'%lamb%
в любом из связанных с ними Ingredient.Name). Проблема, с которой я сталкиваюсь, состоит в том, что результирующий набор содержит одну строку на ингредиент, а не одну строку на рецепт.
Запрос, который генерирует этот набор результатов, (обратите внимание, что таблица Ingredient называется здесь ингредиенты):
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, потому что два ингредиента исключаются на основании их имени component.name, содержащего подстроку, исключенную моим предложением WHERE).
Моя цель - вернуть 3 из 5 названий рецептов в таблице рецептов (вычитая те, которые содержат мясо, в соответствующем ингредиенте. Name).