【问题标题】:SQL query for recipes that can be made from collection of ingredients可以从成分集合中制作的食谱的 SQL 查询
【发布时间】:2012-07-25 21:10:49
【问题描述】:

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

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

其他需要考虑的事项

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

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

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

谢谢,

亚历克

【问题讨论】:

  • @Chandu,我还没有弄清楚,我只是把这个系统作为一种爱好工作,所以我还没有制定任何规范。现在,您可以假设当前稳定的 MySQL 5.5.25 。但实际上,您可以提供的任何答案我都会尝试移植回 MySQL(或我决定使用的任何数据库)

标签: sql database recipe


【解决方案1】:

一种方法是写:

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 中的成分无法制作的所有食谱集。然后,选择所有不在该集合中的食谱。

【讨论】:

  • 我的回答很好。我快速阅读了这个问题。我错过了关于只能用这些原料制作的食谱的要点。
猜你喜欢
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 2021-12-11
  • 1970-01-01
  • 2010-12-06
  • 2021-04-04
  • 1970-01-01
相关资源
最近更新 更多