2017-01-31 2 views
0

У меня есть простая структура таблицы, но с трудом вычисляю соответствующий SQL-запрос.SQL-надмножество указанного списка

Структура таблицы:

Recipe  { id (pk), name, description, ... } 
Ingredient { recipe_id (fk), ingredient } 

Я пытаюсь выяснить SQL сказать .. «Учитывая список ингредиентов, вернуть рецепты, которые имеют по крайней мере, все указанные ингредиенты»

(Еще один способ сказать: указанные ингредиенты - это надмножество соответствующих ингредиентов рецепта)

EDIT: Возможно ли сделать SELECT r.* FROM Recipe r, а не из таблицы ингредиентов?

+0

как бы вы передали список ингредиентов в запрос? –

+0

'ГДЕ ингредиент IN ('Мука', 'Сахар')' –

ответ

2

Вы можете сделать это с помощью group by и агрегации. Один из методов:

select i.recipe_id 
from ingredients i 
where i.ingredient in (<ingredient 1>, <ingredient 2>, . . .) 
group by i.recipe_id 
having count(distinct i.ingredient) = <number of ingredients you are looking for>; 
+0

Возможно ли сделать 'SELECT r FROM Recipe r'? –

+0

Не в MySQL. Это недопустимый синтаксис ('r. *' Будет действительным, если 'r' не является столбцом в' Recipe'). –

+0

Спасибо. Чтобы уточнить, я спрашиваю, можно ли выбрать таблицу FROM Recipe, а не выбрать таблицу FROM Ingredient. –

Смежные вопросы