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

问题描述

我正在处理包含人员组的表X,每个组包含两种类型的事物:人员和其他组(子组)。子群本身包含其他子群和其他人...等等...

表X包含以四列表示的定向链接:(*表示主索引)

  • Parent_id(*)=父组的ID(不唯一)
  • Child_id(*)=孩子的ID(子组或人的ID)(不是唯一的)
  • Link_id(*)=链接ID(不唯一)
  • ChildType =孩子的类型(组或人)

例如:

Parent_id Child_id Link_id ChildType

001002201组

001101202人

001102203人

002003204组

002004205组

002103206人

003104207人

004105208人

我的目标是在以下几列中检索完整的树数据:

  • Parent_id
  • Child_id
  • Link_id
  • ChildType
  • Parent_id父组的ID(当Parent_id不是root时(如果Parent_id是root则为零)
  • 从Parent_id的父组到parent_id的链接的ID

例如

001 002 201 组000 000

001101202人数000 000

001102203人000 000

002 003 204 001 201

002 004 205 001201

002103206人员 001201

003 104 207人员 002 204

004 105208人们 002205

但是,我找不到用于保存来自parent_id父组的数据并将其与链接到当前paren_id的事物一起保存的解决方案。

***编辑2020-08-21:添加了当前解决方案***

我当前的解决方案通过查询递归CTE来获取除这两个滞后数据以外的所有数据:

WITH TTEMP (
  ,Parent_id
  ,Child_id
  ,Link_id
  ,ChildType
) AS
(
SELECT
  ,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

有什么建议吗?

谢谢。

解决方法

以下查询返回您提供的结果。

WITH 
  links_TABLE (Parent_id,Child_id,Link_id,ChildType) AS
(
VALUES
  ('001','002','201','Group'),('001','101','202','People'),'102','203',('002','003','204','004','205','103','206',('003','104','207',('004','105','208','People')
),TTEMP (Parent_id,ChildType,Parent_id_Parent,Link_id_Parent) AS 
(
SELECT Parent_id,'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链接。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...