SQL 具有条件结果的 DB2 递归查询

SQL DB2 recursive query with conditional results

我正在与一个 table X 一起工作,其中包含一组人,每组包含两类事物:人和其他组(子组)。子组本身包含其他子组和其他人...等...

Table X 包含定向 links,表示为四列:(* 表示主索引)

例如:

Parent_id Child_id Link_id 子类型

001 002 201组

001 101 202 人

001 102 203 人

002 003 204组

002 004 205组

002 103 206 人

003 104 207 人

004 105 208 人

我的 objective 是检索以下列中的完整树数据:

例如

001002201组000000

001 101 202 人 000 000

001 102 203 人 000 000

002003204001 201

002004205001 201

002 103 206 人 001 201

003 104 207 人 002 204

004 105 208 人 002 205

但是我找不到保存 parent_id 的 parent 组中的数据并将其与 link 编辑到当前 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

有什么建议吗?

提前致谢。

以下查询returns您提供的结果。

WITH 
  links_TABLE (Parent_id, Child_id, Link_id, ChildType) AS
(
VALUES
  ('001', '002', '201', 'Group')
, ('001', '101', '202', 'People')
, ('001', '102', '203', 'People')
, ('002', '003', '204', 'Group')
, ('002', '004', '205', 'Group')
, ('002', '103', '206', 'People')
, ('003', '104', '207', 'People')
, ('004', '105', '208', 'People')
)
, TTEMP (Parent_id, Child_id, Link_id, ChildType, Parent_id_Parent, Link_id_Parent) AS 
(
SELECT Parent_id, Child_id, Link_id, ChildType, '000' Parent_id_Parent, '000' Link_id_Parent 
FROM links_TABLE C
WHERE NOT EXISTS (SELECT 1 FROM links_TABLE P WHERE P.CHILD_ID = C.PARENT_ID)
  UNION ALL
SELECT X.Parent_id, X.Child_id, X.Link_id, X.ChildType, P.Parent_id, P.Link_id
FROM TTEMP P, links_TABLE X
WHERE X.Parent_id = P.Child_id
)
SELECT *
FROM TTEMP;

db<>fiddle link.