【发布时间】:2015-09-27 20:26:12
【问题描述】:
我正在尝试创建一个返回一组特定寄存器的查询,但我尝试了多种方法,但都不起作用。
我有 4 个如下表:
recipe {
idRecipe integer,
name varchar(100)
}
recipeStep {
idStep integer,
idRecipe integer,
instruction varchar(100)
}
recipeIngredient {
idStep integer,
idIngredient integer
}
ingredient {
idIngredient integer,
name varchar(100)
}
- 一个配方可以有一个或多个步骤;
- 一个步骤只能是一个配方的一部分;
- 一个步骤可以有一种或多种成分;
- 一种成分可以是一个或多个步骤的一部分;
过滤器将返回包含用户选择的成分的所有配方。可以说我想要所有包含所有食谱内涵的食谱 68,25,36,109。所以我来到了这个:
SELECT r.*
FROM recipe r, recipeStep rs, recipeIngredient ri
WHERE r.idRecipe = rs.idRecipe
AND rs.idStep = ri.idStep
AND ri.idIngredient in (68,25,36,109)
问题是这个查询返回所有包含这些成分的所有食谱,我只想要包含所有这些成分的所有食谱
【问题讨论】:
-
您显示的查询可能返回每个配方的次数与它具有匹配的成分一样多 - 因此您可以按配方(id)分组并计算不同的成分以查看它们是否足够(4在你的情况下)。
-
@jkavalik。我正要给出同样的建议=)