4

我有一个数据库,其中包含一个成分表 I 和一个食谱 R 表。这两个表具有多对多关系,因为一个食谱使用许多成分,而一种成分用于许多食谱。我有第三个交叉引用表,它使用交叉引用验证模式来强制执行我的多对多关系,并使用字符串外键(而不是整数)完成。

假设我在我的数据库之外有一个成分 C 的集合,我如何查询配方表 R 中的每个配方,这些配方只能使用 C 中提供的成分列表来制作?

其他需要考虑的事项

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

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

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

谢谢,

亚历克

4

1 回答 1

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. 然后,选择不在该集合中的所有食谱。

于 2012-07-25T21:21:47.550 回答