首先就知道connect by是专门来作递归查询的,他就是利用数据库里表结构的设计的递归应用的关系,进行遍历,从而达到咱们的要求。
connect by后面是进行递归的条件,在这个条件句子里常常会使用到prior这个关键字,
这个关键字表示的是前一条记录,好比 connect by prior id = parentid,
这里代表递归的条件规则是上一条记录的id是下一条记录的parentid,
这样下一条的id又是下下条的parentid,
一层层的归结下去,直到再也不知足这里的connect by里的条件,表示已经到达了树的叶了。
在递归里,还有一个也常常用到 start with,这里表示的是遍历的起始的条件,
好比start with parentid = 0 or parentid is null。
这样咱们能够肯定来的从什么条件开始遍历, 经过start with ..... connect by的配合, 咱们从而能够颇有针对性的拿到咱们的须要的树形的数据。数据库
// 查出带有等级字段以及该子产品目录是否为树叶的子产品目录列表
设计
<select id="channel.product.category.sub.level.list" comment="查出带有等级字段的子产品目录列表"><![CDATA[ SELECT pc.*, LEVEL , CONNECT_BY_ISLEAF ISLEAF FROM qd_product_category pc WHERE pc.enabled=1 and pc.deleted=0 and pc.parent_id is not null START WITH CATEGORY_NAME = ? and parent_id is null CONNECT BY PRIOR pc.PK_ID = pc.PARENT_ID ]]></select>