可以从成分集合中制作的食谱的SQL查询

时间:2012-07-25 21:10:49

标签: sql database recipe

我有一个数据库,其中包含一份成分表和食谱R表。这两个表有多对多的关系,因为一个配方使用了许多成分,而且许多食谱中都使用了一种成分。我有第三个交叉引用表,使用cross-reference validation pattern来强制执行我的多对多关系,并使用字符串外键(而不是整数)完成。

假设我的数据库之外有一系列成分C,我怎样才能查询配方表R中每个可以使用C中提供的成分列表制作的配方?

需要考虑的其他事项

1)速度(当然)最终会成为一个问题,但正确性是我现在所坚持的。

2)成分C的收集可能非常大(约100种成分)。

任何答案,甚至只是指向正确方向的指针都将非常感激。

谢谢,

艾力

1 个答案:

答案 0 :(得分:5)

一种方法是写:

select ...
  from R
 where ID not in
        ( select R_ID
            from RI
           where I_ID not in
                  ( select I_ID
                      from C
                  )
        )
;

即:从C开始。选择C中成分的所有配方成分交叉参考。这将为您提供仅使用C中的成分无法制作的所有配方的集合。然后,选择不在该集合中的所有配方。