start with的用法,其基本语法如下:
select … from tablename
start with 条件1
connect by 条件2
where 条件3;
connect by 条件2
where 条件3;
但是我在pl/sql中写入以上格式的时候,竟然会报错!于是将where子句放在了from子句后面就成功了。
要想用到此种查询语句,就需要在表结构中设计一个子值字段和一个对应的父值字段。
select ... from ... start with...connect by的结果是将子项和父项查询出来,按照树状结构存储在一张表中。如果语句后面没有加上order by条件,那么查询出来的结果是以树的中序遍历的结果存储在结果表中。
在这个语法中,出现了一个PRIOR关键字。其大致用法如下:
select * from T_Role where State!=-1 start with roleId='bbdb2f75' connect by prior roleId = parent_roleId order by idx
从以上sql语句可以看出,start with后面跟的就是整棵树的根节点。网上有很多对prior关键字的解释不是很通俗易懂。按照我的理解,prior关键字在子值字段前面,那么就需要查询其子孙节点,也就是树的自顶向下查询;如果prior关键字在父值字段前面,那就是需要查询根节点的祖先节点,也就是树的自底向上查询。这样理解的确很通俗易懂,用起来也方便。上面这条sql语句就是要查询根节点为"bbdb2f75"的子孙节点。roleId为子值字段,parent_roleId为父值子段。