Допустим, у меня есть три таблицы (mysql):
рецепты
+----+----------------+--------------+
| id | title | image |
+----+----------------+--------------+
| 2 | recipe title 1 | banana image |
| 3 | recipe title 2 | potato image |
+----+----------------+--------------+
ингредиент
+----+-----------+---------+---------------+
| id | recipe_id | food_id | quantity_kg |
+----+-----------+---------+---------------+
| 1 | 2 | 36 | 2.5 |
| 2 | 3 | 37 | 1.5 |
+----+-----------+---------+---------------+
food
+----+---------+-------+-----------+----------+
| id | name | price | foodType | unitType |
+----+---------+-------+-----------+----------+
| 36 | carrot | 2 | vegetable | kg |
| 37 | chicken | 12 | meat | kg |
+----+---------+-------+-----------+----------+
Теперь я хочу получить все вегетарианские рецепты, то есть не содержащие продуктов, где foodType - это «мясо» (или другой продукт животного происхождения). .
Как мне выполнить такой запрос?
Вот что я пробовал до сих пор:
SELECT
recipe.id as recipeId,
recipe.title as title,
food.type as foodType
FROM recipe
INNER JOIN ingredient on ingredient.recipe_id = recipe.id
INNER JOIN food on food.id = ingredient.aliment_id
HAVING
food.type <> 'meat' AND
food.type <> 'seafood' AND
food.type <> 'fish'
ORDER BY recipeId
Это работает (я получаю только вегетарианские рецепты), НО этодублирует все рецепты, если они имеют несколько ингредиентов. например. :
+----------+--------+----------+
| recipeId | title | foodType |
+----------+--------+----------+
| 5 | titleA | type1 |
| 5 | titleA | type2 |
| 5 | titleA | type3 |
| 8 | titleB | type2 |
| 8 | titleB | type5 |
| 8 | titleB | type1 |
| 8 | titleB | type3 |
+----------+--------+----------+
Что я хочу получить:
+----------+--------+
| recipeId | title |
+----------+--------+
| 5 | titleA |
| 8 | titleB |
+----------+--------+
Я уже пытался избавиться от 'foodType' в предложении SELECT, но если я это сделаю, mysql скажет мне:"Неизвестный столбец 'food.type' в 'имеющем предложении'"
Я уже пытался GROUP BY 'recipeId' прямо перед предложением HAVING, но я получаю эту ошибку: "Выражение № 3 из списка SELECT отсутствует вПредложение GROUP BY и содержит неагрегированный столбец «myDb.food.type», который функционально не зависит от столбцов в предложении GROUP BY »(я понимаю эту ошибку).
Я полагаю, это связано с чем-то вроде« Группировкарезультаты после объединения и с предложением ", но я могу ошибаться ...
Большое спасибо