通过中间表进行SQL查询
给出以下表格:
Recipes
| id | name
| 1 | 'chocolate cream pie'
| 2 | 'banana cream pie'
| 3 | 'chocolate banana surprise'
Ingredients
| id | name
| 1 | 'banana'
| 2 | 'cream'
| 3 | 'chocolate'
RecipeIngredients
| recipe_id | ingredient_id
| 1 | 2
| 1 | 3
| 2 | 1
| 2 | 2
| 3 | 1
| 3 | 3
如何构建SQL查询以查找recipe.name ='chocolate'和ingredients.name ='cream'的配方?
没有找到相关结果
已邀请:
6 个回复
晤默报
艰管垮淮
这里的关键点是计数必须等于成分名称的数量。如果它不是一个独特的计数,则由于重复而存在误报的风险。
娠频摩
条件而不是单个直接
。
如果您确定关联是唯一的(即单个配方只能包含每个成分的单个实例),那么您可以使用具有
功能的分组子查询作弊,并可能加快它的速度(性能将取决于DBMS):
或者,如果一个配方可能有多个相同成分的实例(
关联表上没有
约束),您可以将最后一行替换为:
凄嘛姥
降女陷费券
编辑以下评论,谢谢!这是正确的方法:
搂腹时
编辑2: [在人们开始尖叫之前] :) 这可以放在版本2的顶部,这将允许按名称查询而不是传入id。
我测试了第2版,它可以工作。大多数用户在Ingredient表上链接,在这种情况下完全不需要! 编辑3 :(测试结果); 运行此存储过程时,这些是结果。 结果是格式(First Recipe_id; Second Recipe_id,Result)
显然,当两个约束相同时,此查询不处理大小写,但适用于所有其他情况。 编辑4 :(处理相同的约束案例): 替换这一行:
至
与失败案件一起使用: