sqlite - 找到可以从一组成分制成的食谱

时间:2012-06-16 20:01:43

标签: sql sqlite relational-database tagging

现在我在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)

抱歉,我是数据库编程的新手,非常感谢任何帮助

1 个答案:

答案 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

Live example at SQL Fiddle.