在分层查询中使用Prior

时间:2015-03-30 15:01:10

标签: sql oracle connect-by

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

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

PRIOR在此查询中扮演重要角色,但更改PRIOR的位置或从查询中删除它会给我一个不同的结果。
如果你能帮助我理解它的确切用法,那将会非常有用 谢谢:))

2 个答案:

答案 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