Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Base de dados de receitas, pesquisa por ingrediente


Como uma receita pode usar vários ingredientes e você está procurando receitas que usam um ou mais dos ingredientes especificados, você deve usar o DISTINCT palavra-chave para evitar resultados duplicados quando uma receita usa mais de um ingrediente da lista especificada. Além disso, você pode usar IN cláusula para filtrar vários IDs de ingredientes.
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);

Alternativamente, se você estiver procurando por receitas que estejam usando todos os ingredientes especificados na lista, poderá agrupar os resultados pelo nome da receita e verificar se a contagem de registros é igual ao número de ingredientes em sua lista.
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

Isso está assumindo que não haverá registros duplicados com a mesma tupla (recipe_id, ingrediente_id) (melhor garantida com uma restrição UNIQUE).