多对多关系中最小的“原子”成员定义

我遇到了一个有趣的问题,我试图找到一种高效的解决方法,但它却使我不知所措。

我正在加载一些数据提取,其中包含成千上万的用户,每个用户在多对多关系中至少属于一组。有几十到数百个小组。  组不是分层的,但是它们的成员可以并且确实可以重叠。此结构的简化版本如下:

create table users (
   id int not null primary key,username varchar(100) not null unique
);

create table groups (
   id int not null primary key,groupname varchar(100) not null unique
);

create table users_to_groups (
   user_id int not null references users(id),group_id int not null references groups(id),constraint pk_users_to_groups primary key (user_id,group_id)
);

组基本上是具有与之相关联的属性(通常是某种统计数据)的填充对象,这些属性可以根据数据类型以不同的方式进行汇总。许多组具有相同的属性类型,但属性值不同,并且有规则确定将哪个属性值应用于该组的成员...但是,重要的是不要“重复计算”信息(例如在某些情况下)其中的用户属于多个组),这将导致一些非常错误的结果。为此,我试图为关联的属性定义“作用域”(由于缺乏更好的术语)。

我将范围定义为“组成一个或多个组的用户的原子集合”,其方式是在范围之间没有重叠,但多个范围可以在多个组中。举例来说,

  • 用户1、2、3、4和5属于第1组
  • 用户4、5、6、7和8属于第2组
  • 用户9和10属于第3组

我希望有4个作用域:

  • 范围1将包含用户1、2和3
  • 范围2将包含用户4和5
  • 范围3将包含用户6、7和8
  • 范围4将包含用户9和10

这样,我可以将范围定义为组关系:

  • 第1组包含范围1和2
  • 第2组包含范围2和3
  • 第3组仅包含范围4

我想做的是编写一个查询,以表格形式产生上述结果,例如:

UserId,ScopeId,GroupId
1,1,1
2,1
3,1
4,2,2
5,1
5,2
6,3,2
7,2
8,2
9,4,3
10,3

我无法确定如何编写将产生这些结果的查询。有人可以帮忙吗?

Joey209092 回答:多对多关系中最小的“原子”成员定义

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3071158.html

大家都在问