1

这是我的场景:我有一个包含食谱的表,另一个包含与食谱相关的成分(recipe_ingredients)。

表配方成分:

ID      RECIPE_ID     INGREDIENT_ID
1           1              6
2           2              3
3           2              4

就我而言,我想返回包含用户介绍的某些成分的所有食谱(可能是一种或多种),在此示例中,假设所有包含成分 3 和 4 的食谱。显然,当我只查询一种成分时没有问题,但是我不知道如何通过不止一个来实现这一目标......在此先感谢大家!欢迎任何建议!

4

2 回答 2

4

听起来你想要这个:

select RECIPE_ID
from RECIPE_INGREDIENTS
where INGREDIENT_ID in (3, 4)
group by RECIPE_ID
having count(distinct INGREDIENT_ID ) >=2

请参阅带有演示的 SQL Fiddle

然后,如果您想将此加入您的食谱表:

select r.*
from recipes r
inner join
(
  select RECIPE_ID
  from RECIPE_INGREDIENTS
  where INGREDIENT_ID in (3, 4)
  group by RECIPE_ID
  having count(distinct INGREDIENT_ID ) >=2
) ri
  on r.RECIPE_ID = ri.RECIPE_ID
于 2013-01-09T18:47:28.953 回答
3

假设你有 3 个表 recipes , ingradients 和 recipe_ingrediants

SELECT 
    r.*,
    GROUP_CONCAT(i.ingradients)
FROM recipes as r
LEFT JOIN recipe_ingrediants as ri ON ri.recipe_id = r.id
LEFT JOIN ingrediants as i ON r.id = ri.ingrediant_id
GROUP BY r.id
于 2013-01-09T18:48:44.357 回答