带有多列的oracle sql父子级 查询结果

问题描述

我有一个用户表,其中有两列用于审批层次结构,表结构如下所示

User_ID    Submit_to  Approve_to
1          2          3
2          4          5
3          6          2
4          2          3
5          1          0

数据只是例如0提及未批准者: 提交和批准都将是批准人

我需要一个查询,该查询可以按顺序提供批准者详细信息,即谁将为条目用户创建下一个批准者。

解决方法

使用CONNECT BY,可以在表中连接父/子关系。下面的查询将显示每个用户的批准路径。

查询

WITH
    d (user_id,submit_to,approve_to)
    AS
        (SELECT 1,2,3 FROM DUAL
         UNION ALL
         SELECT 2,4,5 FROM DUAL
         UNION ALL
         SELECT 3,6,2 FROM DUAL
         UNION ALL
         SELECT 4,3 FROM DUAL
         UNION ALL
         SELECT 5,1,0 FROM DUAL)
    SELECT d.user_id,LTRIM (SYS_CONNECT_BY_PATH (user_id,'<'),'<') AS approval_path
      FROM d
START WITH approve_to = 0
CONNECT BY NOCYCLE PRIOR user_id = approve_to
  ORDER BY user_id;

结果

在APPROVAL_PATH列中,最左边的数字是给出最终批准的USER_ID,最右边的数字是最初提交需要批准的内容的USER_ID。

USER_ID | APPROVAL_PATH
-----------------------
      1 | 5<2<3<1
      2 | 5<2
      3 | 5<2<3
      4 | 5<2<3<4
      5 | 5

相关问答

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