Ponieważ przepis może zawierać wiele składników, a szukasz przepisów, które wykorzystują jeden lub więcej określonych składników, powinieneś użyć DISTINCT
słowo kluczowe, aby zapobiec duplikowaniu wyników, gdy przepis zawiera więcej niż jeden składnik z określonej listy. Możesz także użyć IN
klauzula o filtrowaniu według wielu identyfikatorów składników.
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);
Alternatywnie, jeśli szukasz przepisów, które wykorzystują wszystkie składniki wymienione na liście, możesz pogrupować wyniki według nazwy przepisu i sprawdzić, czy liczba rekordów jest taka sama jak liczba składników na liście.
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
Jest to przy założeniu, że nie będzie zduplikowanych rekordów z tą samą krotką (recipe_id, component_id) (lepiej jest zapewnić ograniczenie UNIQUE).