指定列表的SQL超集

时间:2017-01-31 02:02:48

标签: mysql sql join

我有一个简单的表结构,但很难搞清楚相应的SQL查询。

表格结构:

Recipe        { id (pk), name, description, ... }
Ingredient    { recipe_id (fk), ingredient }

我正在试图找出要说的SQL ..“鉴于成分列表,返回至少具有所有指定成分的食谱”

(另一种说法:指定成分是匹配食谱成分的超集)

编辑:可以SELECT r.* FROM Recipe r而不是成分表吗?

1 个答案:

答案 0 :(得分:3)

您可以使用group by和聚合执行此操作。一种方法是:

select i.recipe_id
from ingredients i
where i.ingredient in (<ingredient 1>, <ingredient 2>, . . .)
group by i.recipe_id
having count(distinct i.ingredient) = <number of ingredients you are looking for>;