我在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个用户将在用户表中。
发布于 2011-07-20 16:11:55
对于每个用户项,UserItemCombinations将有一行,并且一个用户只能有一个组合,因此如果查询组合为{2,3}
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));发布于 2011-07-20 17:22:37
如果UserItemCombinations中没有太多的更新,并且所需查询的性能足够重要,您可以在User表中创建额外的字段,即Items,并为每个用户创建填充这些值的SP。存储过程将选择每个循环中的每个用户排序的项目,并将它们连接成一个字符串,放入User.Items字段中。您还可以在INSERT, UPDATE, DELETE的UserItemCombinations上创建触发器,然后再次重新计算该值。
您也可以在该字段上创建索引。
发布于 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));
https://stackoverflow.com/questions/6758765
复制相似问题