首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反向开始

反向开始
EN

Stack Overflow用户
提问于 2015-09-09 18:59:34
回答 2查看 71关注 0票数 0

我有一张像这样的组织表格:

代码语言:javascript
复制
 USER_ID | USER_NAME | RPT_TO_USR
 1         Bob         2
 2         John        3
 3         Wendy       {null}

我正在尝试构建一个查询,该查询将构建我的组织并识别不同的级别。如果我有一个特定的用户想从CONNECT BY开始,我就能做到这一点。

代码语言:javascript
复制
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文档和一些关于堆栈溢出的CTE帖子,试图看看这是否是一种解决方案,或者是否有办法逆转START WITH CONNECT BY的流,但到目前为止,我还没有取得任何成功。

基本上,我不想从鲍勃开始,知道他向向温迪汇报的约翰汇报,我想从温迪开始,知道约翰向她汇报,鲍勃向约翰汇报。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-10 01:45:10

使用CTE的递归查询:

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2015-09-09 19:14:10

应该只是改变你使用的列的问题.要从连接中的两个列开始并排序,请按XXX =prior.

代码语言:javascript
复制
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 

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32487281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档