看到一个较为通俗易懂的connect by的例子,是百度知道的答案,稍微整理了一下。我自己这样理解:connect by prior "id" = "p_id" ,是指查询结果中的子节点(有可能是原树的父节点)用 "p_id" 作为key,来和本记录的 "id" field 作链接。
树的结构如下:
0
|
| |
1 3
|
| |
2 4
|
5
> select * from a start with id=1 connect by prior id = pid;
从1向叶节点遍历.1的子节点是2和4,而2的子节点是5.所以结果是
id name pid
1 10 0
2 11 1
5 121 2
4 12 1
注意5排在2的后面。
> select * from a start with id=5 connect by prior pid = id
从5向根节点遍历,5的父节点是2,2的父节点是1
这个语句查出来的结果应该是这样的
ID NAME PID
5 121 2
2 11 1
1 10 0
-- ===================================== 原创 =====================================
> select * from a start with id=1 connect by prior id+1 = id
从1向叶节点遍历,(1+1) 的叶节点是2
这个语句查出来的结果应该是这样的
ID NAME PID
1 10 0
2 11 1
3 20 04 12 15 121 2