选择与某些输入条件匹配的记录

时间:2012-08-27 18:03:22

标签: database-design relational-database

我正在尝试实现一个Web服务,它将把一些成分作为输入,它将查找数据库中的一些收件人,并将返回那些需要提供全部或部分成分作为输入的那些。

我可以很容易地找出收件人和ingrdients之间的多对多关系,因此我计划为收件人设置一个表,一个用于成分,一个链接表位于中间。但是,如果我这样做,我不知道如何以有效的方式查询表以获取所需的信息。

举一个明确的例子考虑以下内容:

输入:意大利面,鸡肉,香蒜酱,西红柿 输出应该是:

  • 番茄酱鸡肉意大利面(需要意大利面,鸡肉和西红柿)
  • 烤箱里的香蒜酱意面(需要意大利面和香蒜酱)
  • 等。

但产量不应该包括番茄酱土豆鸡(因为我们在输入成分中没有土豆)。

我将在Java和MySQL中实现这一点(尽管Java部分对于这个问题可能并不重要)。

可以帮助我解决这个问题。我真的在如何实现查询,但如果你能想到其他方法来接近它,那么这些也是受欢迎的。

提前致谢

1 个答案:

答案 0 :(得分:1)

首先,将您想要的成分列表放入临时表中。我们称之为“所需”。

以下查询将找到仅在所需表格中包含成分的配方:

select r.recipe.name, group_concat(i.ingredientname separator ', ') as ingredients,
       count(*) as numingredients
from RecipeIngredient ri join
     Recipe r
     on ri.recipeid = r.recipeid join
     Ingredient i
     on ri.ingredientid = i.ingredientid left outer join
     Desired d
     on i.ingredientname = d.ingredientname
group by r.recipe.name
having max(case when d.ingredientname is null then 1 else 0 end) = 0 -- all ingredients in list