sql子集查询

时间:2018-04-24 09:04:41

标签: sql postgresql

关于子集的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)

这样的事情可能吗?

2 个答案:

答案 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