Тъй като рецептата може да използва множество съставки и вие търсите рецепти, които използват една или повече от посочените съставки, трябва да използвате DISTINCT
ключова дума за предотвратяване на дублиращи се резултати, когато рецептата използва повече от една съставка от посочения списък. Също така можете да използвате IN
клауза за филтриране по множество идентификатори на съставките.
select DISTINCT r.name
from
recipes r
inner join ingredient_index i
on i.recipe_id = r.recipe_id
where i.ingredient_id IN (7, 5);
Като алтернатива, ако търсите рецепти, които използват всички съставки, посочени в списъка, тогава можете да групирате резултатите по име на рецепта и да проверите дали броят на записите е същият като броя на съставките във вашия списък.
select r.name
from
recipes r
inner join ingredient_index i
on i.recipe_id = r.recipe_id
where i.ingredient_id IN (7, 5)
GROUP BY r.name
HAVING COUNT(*) = 2
Това предполага, че няма да има дублирани записи със същия (recipe_id, ingredient_id) кортеж (по-добре е осигурено с ограничение UNIQUE).