我正在尝试在我的项目中实现分层查询。我已经在互联网上阅读了大部分文件,但无法获得与使用PRIOR相关的信息。
SELECT EMPNO,ENAME,MGR,LEVEL
FROM TMP_PCH
CONNECT BY PRIOR EMPNO=MGR
START WITH MGR IS NULL;
PRIOR在此查询中扮演重要角色,但更改PRIOR的位置或从查询中删除它会给我一个不同的结果。
如果你能帮助我理解它的确切用法,那将会非常有用
谢谢:))
答案 0 :(得分: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'
返回John(和John本人)的所有老板。
答案 1 :(得分:1)
您可以将PRIOR
理解为对先前层次结构级别的引用
PRIOR MGR = EMPNO
表示“上一级经理现在是员工”,所以我们要自下而上
PRIOR EMPNO = MGR
表示“上一级员工现在是经理”,所以我们将自上而下
当你这样写EMPNO = PRIOR MGR
时,你可以把它读作“我们从员工到他的经理的指示”
自下而上
MGR
PRIOR MGR EMPNO
PRIOR EMPNO
vs top-down
PRIOR MGR
PRIOR EMPNO MGR
EMPNO