分层查询连接Oracle

时间:2015-02-13 14:32:55

标签: oracle hierarchical

我正在尝试在oracle中实现Connect By查询。试图了解它是如何工作的。所以我有一张简单的桌子 看起来像:

empno ename mno
1      KS    null
2      AB     2
3      BC     1
4      TR     3
5      QE     2
6      PL     3
7      LK     6

查询

SELECT empno, ename, mno
   FROM test
START WITH ename = 'LK'
   CONNECT BY PRIOR empno = mno;

因此,当名称为LK时,我应该得到以下父/子行LK> PL> BC> KS。 SQLFIDDLE但我得不到正确的结果。我做错了什么?

1 个答案:

答案 0 :(得分:2)

不,你不应该。

LK的父母是PL。 PL的父母是BC。 BC的父母是KS。 KS没有父母。当您尝试从LK启动树时,您将获得所有它的孩子 - 没有,因为没有mno = 7的记录。

您在查询中混淆了父子订单。如果你想从叶子到根部解开三个,你应该问

SELECT empno, ename, mno
   FROM test
START WITH ename = 'LK'
   CONNECT BY empno = PRIOR mno;

如果您希望树看到自然顺序,您应该问

SELECT empno, ename, mno
   FROM test
START WITH mno is null
   CONNECT BY PRIOR empno = mno;