在相关业务查询中,我们常常遇到相关的上下级关系情况,如下图中行政区划关联,此时就要用到Oracle 提供的start with 关键字来帮助我们进行递归查询

基本语法
SELECT ... FROM + 表名 START WITH + 条件1 CONNECT BY PRIOR + 条件2 WHERE + 条件3
条件1:是根节点的限定语句,当然可以放宽限定条件,以取得多个根节点,也就是多棵树;在连接关系中,除了可以使用列明外,还允许使用列表达式。 START WITH 子句为可选项,用来标识哪个节点作为查找树形结构的根节点。若该子句省略,则表示所有满足查询条件的行作为根节点。 条件2:是连接条件,其中用PRIOR表示上一条记录,例如CONNECT BY PRIOR a_pid = a_id,意思就是上一条记录的a_pid是本条记录 的a_id,即本记录的父亲是上一条记录。CONNECT BY子句说明每行数据将是按照层次顺序检索,并规定将表中的数据连入树形结构的关系中。 PRIOR运算符必须放置在连接关系的2列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构的顺序是自顶向下,还是自底向上。 条件3:是过滤条件,用于对返回的记录进行过滤。
1,定义查找起始节点 在自顶向下查询树状结构时,不但可以从根节点开始,还可以定义任何节点为起始节点,以此开始,向下查找。这样查找的结果就是以该节点为开始的结构是树的一枝。
例子: 在本例中如果我们想知道红牌楼的所有上级机构,那么sql语句如下: SELECT * FROM AreaMap START WITH a_nam = ‘红牌楼‘ CONNECT BY PRIOR a_pid = a_id;
该sql语句执行结果为:
同理,我们想知道成都市 所有的下属机构,则sql语句如下:
SELECT * FROM AreaMap START WITH a_nam = ‘成都市‘ CONNECT BY PRIOR a_id = a_pid;
该sql语句的执行结果如下:

(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|