SELECT WHERE多行

时间:2017-09-07 13:32:08

标签: mysql sql database relational-database mariadb

我有三张表如下

表食谱

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的食谱 - 这正是我真正想要的。

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)