sql >> Base de Datos >  >> RDS >> Mysql

Base de datos de recetas, búsqueda por ingrediente

Dado que una receta puede usar varios ingredientes y está buscando recetas que usen uno o más de los ingredientes especificados, debe usar DISTINCT palabra clave para evitar resultados duplicados cuando una receta usa más de un ingrediente de la lista especificada. Además, puede usar IN cláusula para filtrar en múltiples ID 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, si está buscando recetas que usan todos los ingredientes especificados en la lista, puede agrupar los resultados por nombre de receta y verificar si el recuento de registros es el mismo que el número de ingredientes en su 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

Esto supone que no habrá registros duplicados con la misma tupla (receta_id, ingrediente_id) (es mejor asegurarse con una restricción ÚNICA).