MySQL在一列中返回多个值的行?

时间:2013-01-09 18:45:42

标签: mysql

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

TABLE RECIPE_INGREDIENTS:

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

在我的情况下,我想要返回用户介绍的一些食谱(可能是一个或多个)的所有食谱,在这个例子中,让我们说所有食谱的成分3和4.当我只查询一种成分时,没有问题,但我不知道如何实现多个... 提前谢谢!欢迎任何建议!

2 个答案:

答案 0 :(得分:3)

听起来你想要这个:

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

请参阅SQL Fiddle with Demo

然后,如果你想把它加入你的食谱表:

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

答案 1 :(得分:3)

假设您有3个食谱配方,配料和食谱成分

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