首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于检查组合并将其与给定组合进行匹配的Sql查询

用于检查组合并将其与给定组合进行匹配的Sql查询
EN

Stack Overflow用户
提问于 2011-07-20 16:00:15
回答 3查看 1.5K关注 0票数 0

我在Sql中有一个场景,其中我遵循了模式。

如果我在项目表中有3个项目,那么所有项目的一个唯一组合将分配给用户。对于ex:

项目:1 2 3

则组合为:{1}、{2}、{3}、{1,2}、{1,2,3}、{1,3}、{2,3}都是唯一的组合。这些组合中的任何一个都将分配给单个用户。

现在我想找出给定的组合属于哪个用户,我如何才能找到它?例如:我将传递条目列表{2,3},然后它应该从表UserItemCombinations中返回拥有该组合的用户I。{2,3}作为逗号分隔的字符串传递给SP。我以3个项目为例,这个表可能包含n个项目。用户数量将取决于组合的数量。例如:对于三个项目,有7个组合,因此7个用户将在用户表中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-20 16:11:55

对于每个用户项,UserItemCombinations将有一行,并且一个用户只能有一个组合,因此如果查询组合为{2,3}

代码语言:javascript
运行
复制
select userid from user where userid not in 
  (select distinct userid from UserItemCombinations where itemid in 
                 (select itemid from item where itemid not in (2,3));
票数 2
EN

Stack Overflow用户

发布于 2011-07-20 17:22:37

如果UserItemCombinations中没有太多的更新,并且所需查询的性能足够重要,您可以在User表中创建额外的字段,即Items,并为每个用户创建填充这些值的SP。存储过程将选择每个循环中的每个用户排序的项目,并将它们连接成一个字符串,放入User.Items字段中。您还可以在INSERT, UPDATE, DELETEUserItemCombinations上创建触发器,然后再次重新计算该值。

您也可以在该字段上创建索引。

票数 1
EN

Stack Overflow用户

发布于 2011-07-20 16:14:18

从UserItemCombinations中选择userid,itemid in (2,3)和itemid not in (select itemid from Item where Item in not in (2,3));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6758765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档