【发布时间】:2020-12-10 06:30:40
【问题描述】:
我正在处理一个包含一组人的表 X,每个组包含两种类型的东西:人和其他组(子组)。子组本身包含其他子组和其他人......等等......
表 X 包含表示为四列的定向链接:(* 表示主索引)
- Parent_id (*) = 父组的 id(不唯一)
- Child_id (*) = 孩子的 id(子组或人的 id)(不是唯一的)
- Link_id (*) = 链接的 ID(不唯一)
- ChildType = 孩子的类型(组或人)
例如:
Parent_id Child_id Link_id ChildType
001 002 201 集团
001 101 202 人
001 102 203 人
002 003 204 集团
002 004 205 集团
002 103 206 人
003 104 207 人
004 105 208 人
我的目标是在以下列中检索完整的树数据:
- Parent_id
- Child_id
- Link_id
- 子类型
- Parent_id 的父组的id(当Parent_id 不是root 时(如果Parent_id 是root 则为零)
- 从Parent_id的父组到parent_id的链接id
例如
001 002 201 组 000 000
001 101 202 人 000 000
001 102 203 人 000 000
002 003 204 组 001 201
002 004 205 组 001 201
002 103 206 人 001 201
003 104 207 人 002 204
004 105 208 人 002 205
但是我找不到解决方案来保存 parent_id 的父组中的数据,并将其与链接到当前 paren_id 的内容一起获取。
*** 2020-08-21 编辑:添加当前解决方案 ***
我当前的解决方案通过递归 CTE 查询获得了除这两个滞后数据之外的所有数据:
WITH TTEMP (
, Parent_id
, Child_id
, Link_id
, ChildType
) AS
(
SELECT
, Parent_id
, Child_id
, Link_id
, ChildType
FROM links_TABLE
WHERE Parent_id = :query_group_id
UNION ALL
SELECT
L.Parent_id
, L.Child_id
, L.Link_id
, L.ChildType
FROM TTEMP AS T
, links_TABLE AS L
WHERE T.Child_id = L.Parent_id
AND T.ChildType = 'Group'
)
SELECT
Parent_id
, Child_id
, Link_id
, ChildType
FROM TTEMP
FOR FETCH ONLY
有什么建议吗?
提前致谢。
【问题讨论】:
-
发布您当前的解决方案,以便可以使用它来扩展它。哪个 Db2 版本和平台?
-
@data_henrik:完成。我目前使用的是 db2 v11。
标签: sql db2 hierarchical-data recursive-query