关于子集的SQL问题,
考虑配方表,成分表和recipe_ingredient连接表的数据库设计。我们只需要连接表来解决这个问题。
recipe_ingredient table:
Column | Type | Modifiers
--------+---------+-----------
r_id | integer | # Key to the recipe table
i_id | integer | # Key to the ingredient table
配方需要1种或更多种成分。 鉴于成分ID列表,是否可以找到所有兼容的配方?兼容的配方将包含所提供成分的子集。
此查询已结束。它允许我查看每个配方所需的所有成分ID。
select array_agg(i_id), r_id from recipe_ingredient group by r_id
我可以运行上面的查询,然后将成分列表与我自己的代码列表进行比较。但我想知道是否所有内容都可以在SQL级别完成,
我想做的是:
select array_agg(i_id), r_id from recipe_ingredient group by r_id
HAVING array_agg(i_id) IS_SUBSET_OF (:INGREDIENT_LIST)
这样的事情可能吗?
答案 0 :(得分:0)
假设您有食谱表:
select r.*
from recipes r
where not exists (select 1
from recipe_ingredient ri
where ri.r_id = r.id and
ri.i_id not in ( . . . )
);
这样可以获得列表中没有任何成分的所有食谱。
答案 1 :(得分:-1)
将您的成分列表放入临时表变量:
DECLARE @selectedIngredientList TABLE (id INT);
SELECT DISTINCT r_id
FROM recipe_ingredient ri INNER JOIN @selectedIngredientList i
ON ri.i_id = i.id