我正在尝试在我的项目中实现分层查询。我已经阅读了互联网上的大部分文件,但无法获得与使用 PRIOR 相关的信息。
SELECT EMPNO,ENAME,MGR,LEVEL
FROM TMP_PCH
CONNECT BY PRIOR EMPNO=MGR
START WITH MGR IS NULL;
PRIOR 在此查询中起着重要作用,但是更改 PRIOR 的位置或从查询中删除它会给我带来不同的结果。
如果您能帮助我理解它的确切用途,那将非常有帮助。
谢谢 :)
我正在尝试在我的项目中实现分层查询。我已经阅读了互联网上的大部分文件,但无法获得与使用 PRIOR 相关的信息。
SELECT EMPNO,ENAME,MGR,LEVEL
FROM TMP_PCH
CONNECT BY PRIOR EMPNO=MGR
START WITH MGR IS NULL;
PRIOR 在此查询中起着重要作用,但是更改 PRIOR 的位置或从查询中删除它会给我带来不同的结果。
如果您能帮助我理解它的确切用途,那将非常有帮助。
谢谢 :)
层次结构意味着,表的一行是“父”,而另一行是“子”。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'
返回约翰(和约翰本身)的所有老板。
可以理解PRIOR
为对上一层层级的引用。
PRIOR MGR = EMPNO
意思是“上一级的经理现在是员工”,所以我们要自下而上
PRIOR EMPNO = MGR
意思是“上一级的员工现在是经理”,所以我们要自上而下
当你这样写时EMPNO = PRIOR MGR
,你可以把它读成“我们从一个员工到他的经理的方向”
自下而上
MGR
PRIOR MGR EMPNO
PRIOR EMPNO
与自上而下
PRIOR MGR
PRIOR EMPNO MGR
EMPNO