我有三张表如下
表食谱
id | name
1 | Pasta
2 | Whatever
表成分
id | name
1 | Spaghetti
2 | Tomato sauce
表recipe_ingredients
id | recipe_id (FK recipe.id) | ingredient_id (FK ingredient.id)
1 | 1 (Pasta) | 1 (Spaghetti)
2 | 1 (Pasta) | 2 (Tomato sauce)
我希望SELECT
基于成分列表的配方,例如“找到配料1和2的食谱”
我将如何实现这一目标?
根据以下评论进行修改:
只是添加到我原来的问题:我能够通过
获得完全匹配SELECT ... WHERE GROUP_CONCAT... = '1,2'
但是这只会给我带有成分1和2的确切配方,而不是可能含有成分1,2和3的食谱 - 这正是我真正想要的。
答案 0 :(得分:0)
它不漂亮,但它有效:
[Actions.REVIEW_API_SUCCESS]: (state, action) => {
const result = Object.assign({ }, state, {reviews: action.payload});
return result;
},
}
答案 1 :(得分:0)
SELECT recipe_id 从成分 在哪里ingredient_id IN(1,2) GROUP BY recipe_id 有COUNT(*)= 2;
该技术的特点是找到包含至少3种成分中的3种的配方:
WHERE ingredient_id IN (11,22,33,44,55)
GROUP BY recipe_id
HAVING COUNT(*) >= 3;
答案 2 :(得分:-1)
试
SELECT ri.*, i.*, r.* FROM recipe_ingredients ri, recipe r, ingredient i
WHERE ri.ingredient_id = i.id AND ri.recipe_id = r.id AND
ri.ingredient_id in (1,2)