我正在尝试在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但我得不到正确的结果。我做错了什么?
答案 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;