在分层查询中使用 Prior

Use of Prior in Hierarchical Query

我正在尝试在我的项目中实现分层查询。我已经阅读了互联网上的大部分文档,但无法获得与其中使用 PRIOR 相关的信息。

SELECT EMPNO,ENAME,MGR,LEVEL
FROM TMP_PCH
CONNECT BY PRIOR EMPNO=MGR
START WITH MGR IS NULL;

PRIOR 在此查询中起着重要作用,但更改 PRIOR 的位置或将其从查询中删除会得到不同的结果。
如果你能帮助我理解它的确切用法,那将非常有帮助。
谢谢:)

层次结构意味着,table 的一行是 "parent",而另一行是 "child"。 PRIOR用来表示谁是谁。子句 CONNECT BY PRIOR EMPNO = MGR 表示,如果两行具有相同的值,但第一行在一列 EMPNO 中,第二行在一列 MGR 中,则第二行是 "parent",第一个是 "child"。所以,查询

SELECT EMPNO,ENAME,MGR,LEVEL
FROM TMP_PCH
CONNECT BY PRIOR EMPNO = MGR
START WITH MGR = 'John'

returns John 的所有下属(和 John 本身),并查询

SELECT EMPNO,ENAME,MGR,LEVEL
FROM TMP_PCH
CONNECT BY PRIOR MGR = EMPNO
START WITH MGR = 'John'

returns John 的所有老板(和 John 本身)。

你可以把PRIOR理解为对上一层的引用。
PRIOR MGR = EMPNO 表示 "the manager from the previous level is now the employee",所以我们要自下而上
PRIOR EMPNO = MGR 表示 "the employee from the previous level is now the manager",所以我们要自上而下

这样写的时候EMPNO = PRIOR MGR,可以读成"we go the direction from an employee to his manager"

自下而上

             MGR
PRIOR MGR    EMPNO
PRIOR EMPNO

与自上而下

PRIOR MGR
PRIOR EMPNO  MGR
             EMPNO