现在我在ios应用程序中使用sqlite,我希望能够搜索可以从成分列表中制作的食谱(即食谱,这些食谱是所提供成分的一部分)
例如:
Recipe 1: A B C
Recipe 2: A B
Recipe 3: C D
Recipe 4: A
Recipe 5: E
Query for ingredients A B C returns recipes {1, 2, 4}
Query for ingredients A B returns recipes {2, 4}
Query for ingredients D returns {}
目前我设置的是
Table Items
name text primary key
Table Recipes
ID required_item integer, recipe_name text
我可以轻松地查询包含三种成分中的任何一种的食谱以及包含所有这三种成分的食谱的查询,但我无法弄清楚如何只进行查询
Recipes ∈ P(Ingredients)
抱歉,我是数据库编程的新手,非常感谢任何帮助
答案 0 :(得分:3)
您可以将left join
用于搜索表。然后是group by
食谱。使用having
子句要求对于每个配方,没有不在搜索列表中的成分。例如:
select ri.RecipeNr
from RecipeIngredients ri
left join
(
select 'A' as Ingredient
union all
select 'B'
union all
select 'C'
) search
on ri.Ingredient = search.Ingredient
group by
ri.RecipeNr
having count(case when search.Ingredient is null then 1 end) = 0