0

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

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

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

4

2 回答 2

2

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

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

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

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

返回约翰(和约翰本身)的所有老板。

于 2015-03-30T15:22:43.660 回答
1

可以理解PRIOR为对上一层层级的引用。
PRIOR MGR = EMPNO意思是“上一级的经理现在是员工”,所以我们要自下而上
PRIOR EMPNO = MGR意思是“上一级的员工现在是经理”,所以我们要自上而下

当你这样写时EMPNO = PRIOR MGR,你可以把它读成“我们从一个员工到他的经理的方向”

自下而上

             MGR
PRIOR MGR    EMPNO
PRIOR EMPNO

与自上而下

PRIOR MGR
PRIOR EMPNO  MGR
             EMPNO
于 2015-03-30T15:41:22.457 回答