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

pgh*_*er4 4 sql database recipe

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

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

其他需要考虑的事情

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

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

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

谢谢,

亚历克

rua*_*akh 5

一种方法是写:

select ...
  from R
 where ID not in
        ( select R_ID
            from RI
           where I_ID not in
                  ( select I_ID
                      from C
                  )
        )
;
Run Code Online (Sandbox Code Playgroud)

那就是:开始C.选择所有的配方配料交叉引用其中的成分是不是C.这为您提供了仅使用成分无法制作的所有配方的集合C.然后,选择不在该集合中的所有配方.