3

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

对不起,我是数据库编程的新手,任何帮助将不胜感激

4

1 回答 1

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

SQL Fiddle 上的实时示例。

于 2012-06-16T23:05:51.610 回答