由于配方可以使用多种成分,并且您正在寻找使用指定的一种或多种成分
DISTINCT的配方,因此,如果配方使用指定列表中的一种以上成分,则应使用关键字来防止重复结果。另外,您可以使用
IN子句来筛选多个成分ID。
select DISTINCT r.namefrom recipes r inner join ingredient_index i on i.recipe_id = r.recipe_idwhere i.ingredient_id IN (7, 5);
或者,如果要查找使用列表中指定的所有成分的配方,则可以按配方名称对结果进行分组,并检查记录数是否与列表中的成分数相同。
select r.namefrom recipes r inner join ingredient_index i on i.recipe_id = r.recipe_idwhere i.ingredient_id IN (7, 5)GROUP BY r.nameHAVINg COUNT(*) = 2
假设不会有重复的记录具有相同的(recipe_id,Ingredient_id)元组(最好通过UNIQUE约束确保)。



