Имеются две таблицы
ingredient(ингредиент)
и
dish(блюдо)
. Между ними существует типичная связь many to many через промежуточную таблицу
ingredient_dish
.
Ко мне поступают данные - ингредиенты в неопределенном количестве.
Мне нужно выбрать все блюда, у которых их ингредиенты включают в себя поступающие ингредиенты. Те найти блюда у которых есть все искомые ингредиенты
Мне нужно это сделать в одном запросе SQL. И я такой
запрос уже сделал, он работает, но он очень громоздкий. Мне нужно будет для каждого искомого ингредиента делать по одному SELECT в подзапросе.
Можно ли как то оптимизировать данный запрос? Подскажите в сторону каких возможностей SQL рыть. Спасибо.
Тут идет поиск по ингредиентам 11 и 14. Получается при данном способе мне нужно каждый раз писать подзапрос SELECT под каждый ингредиент.
SELECT
*
FROM
`dish` AS d
WHERE
11
IN
(
SELECT
i.`id`
FROM
`ingredient_dish` as i_d
JOIN
`ingredient` as i
ON
i_d.`ingredient_id` = i.`id`
WHERE
i_d.`dish_id` = d.`id`
)
AND
14
IN
(
SELECT
i.`id`
FROM
`ingredient_dish` as i_d
JOIN
`ingredient` as i
ON
i_d.`ingredient_id` = i.`id`
WHERE
i_d.`dish_id` = d.`id`
)
;