语法: start with…connect by…prior
start with子句:递归的条件。需要注意的是如果with后面的值是子节点那么求出的就是他的父节点和祖宗节点;如果是父节点那么求出的就是他的子节点和子孙节点。
connect by子句:连接条件。 关键词prior,prior跟它右边的父节点放在一起(prior p.parent)表示往父节点方向遍历,;反之,如果prior跟子节点放在一起(prior p.id)表示往叶子方向遍历。这里需要注意的 =p.id 放在prior关键词的前面或者后面都没什么关系,也就是上面可以这样写 p.id= prior p.paren。重要的是prior旁边放的是什么。
level伪列:递归的层次表示,用来进行输出缩进。可以看到递归层次,看起来很直观。 需要注意的是Level 也可以放在Group by后面,也可以放在select 后面。
示例:
SELECT *, level FROM table
START WITH name = 'xxx'
CONNECT BY PRIOR parent_id = id
注:where条件的作用域不是在递归查询中的,而是在递归查询完后的