反向开始
Reverse Start With
我的组织 table 看起来像这样:
USER_ID | USER_NAME | RPT_TO_USR
1 Bob 2
2 John 3
3 Wendy {null}
我正在尝试构建一个查询来构建我的组织并识别不同的级别。如果我有一个特定的用户,我想通过 CONNECT BY
开始,我就可以做到这一点
SELECT USER_ID, USER_NAME, RPT_TO_USR, LEVEL
FROM USERTABLE
START WITH USER_ID = 1
CONNECT BY USER_ID = PRIOR RPT_TO_USR
但是我想从用户 3 开始并向下构建。我一直在查看 Oracle 文档和 Stack Overflow 上的一些 CTE post 试图看看这是否是一个解决方案,或者是否有办法逆转 START WITH
CONNECT BY
, 但到目前为止我还没有成功。
基本上,我不想从 Bob 开始,知道他向 John 汇报,John 向 Wendy 汇报,而是从 Wendy 开始,知道 John 向她汇报,Bob 向 John 汇报。
应该只是更改您正在使用的列的问题...开始并按 XXX = prior 连接中两列的顺序...
SELECT USER_ID, USER_NAME, RPT_TO_USR, LEVEL
from org
start with rpt_to_usr is null
CONNECT BY RPT_TO_USR = PRIOR USER_ID
使用 CTE 的递归查询:
WITH CTE (USER_ID,USER_NAME,RPT_TO_USR,LV) AS
(
SELECT USER_ID,USER_NAME,RPT_TO_USR,1
FROM USERTABLE
WHERE RPT_TO_USR IS NULL
UNION ALL
SELECT A.USER_ID,A.USER_NAME,A.RPT_TO_USR,B.LV + 1
FROM USERTABLE A, CTE B
WHERE A.RPT_TO_USR = B.USER_ID
)
SELECT * FROM CTE;
我的组织 table 看起来像这样:
USER_ID | USER_NAME | RPT_TO_USR
1 Bob 2
2 John 3
3 Wendy {null}
我正在尝试构建一个查询来构建我的组织并识别不同的级别。如果我有一个特定的用户,我想通过 CONNECT BY
SELECT USER_ID, USER_NAME, RPT_TO_USR, LEVEL
FROM USERTABLE
START WITH USER_ID = 1
CONNECT BY USER_ID = PRIOR RPT_TO_USR
但是我想从用户 3 开始并向下构建。我一直在查看 Oracle 文档和 Stack Overflow 上的一些 CTE post 试图看看这是否是一个解决方案,或者是否有办法逆转 START WITH
CONNECT BY
, 但到目前为止我还没有成功。
基本上,我不想从 Bob 开始,知道他向 John 汇报,John 向 Wendy 汇报,而是从 Wendy 开始,知道 John 向她汇报,Bob 向 John 汇报。
应该只是更改您正在使用的列的问题...开始并按 XXX = prior 连接中两列的顺序...
SELECT USER_ID, USER_NAME, RPT_TO_USR, LEVEL
from org
start with rpt_to_usr is null
CONNECT BY RPT_TO_USR = PRIOR USER_ID
使用 CTE 的递归查询:
WITH CTE (USER_ID,USER_NAME,RPT_TO_USR,LV) AS
(
SELECT USER_ID,USER_NAME,RPT_TO_USR,1
FROM USERTABLE
WHERE RPT_TO_USR IS NULL
UNION ALL
SELECT A.USER_ID,A.USER_NAME,A.RPT_TO_USR,B.LV + 1
FROM USERTABLE A, CTE B
WHERE A.RPT_TO_USR = B.USER_ID
)
SELECT * FROM CTE;