我正在尝试构思一个解决递归问题的方案,但我无法完全理解它。我有三个表,我们称它们为DocGroup
、GroupGroup
和GroupUser
。在DocGroup
表中,有一个分层结构的记录,指定另一个记录作为其父记录,直到一条记录成为其自身的父记录。
Doc Group
1 1
2 2
3 2
4 3
5 2
6 4
GroupGroup
包含 Group 嵌套:
Group MemberGroup
4 2
4 1
GroupUser
将一组与多个用户相关联:
Group User Key
1 1 ABC
1 3 BCD
1 4 CDE
2 1 DEF
2 2 EFG
2 3 FGH
3 3 GHI
4 2 HIJ
4 3 IJK
4 4 JKL
我想要指定一个用户和文档,并获取该组合的所有键的列表。例如,如果我选择用户2和文档2,我需要返回“EFG”,但是如果我选择文档6和用户3,则需要返回“IJK”、“GHI”、“FGH”和“BCD”,因为组2和1在组4中,而组4=文档4,其具有一组3。在所有情况下,我只需要获取指定用户的记录。
我想我需要多次递归才能完成这个任务,但我似乎无法在SQL中构建出这样的映射,而且我也不想使用循环和游标来完成此操作。
Group
在所有情况下都引用了Document
,但并不是所有的Documents
在Group
字段中都有另一条记录指定的子级。 - cjbarthDoc-Group
嵌套为“绿色嵌套”,而Group-MemberGroup
则为“红色嵌套”。我猜你想要的是,对于给定的用户,找到所有相关的组(使用第三个表)。然后,使用“红色”嵌套,找到所有相关组的父级(和父级的父级等等)组。然后使用“绿色”嵌套,找到这些父组的所有子级(和孙子级等等)。因此,要从用户组转到文档,您可以使用红色和绿色路径,但红色只能向上走,绿色只能向下走。对吗? - ypercubeᵀᴹ