zoukankan      html  css  js  c++  java
  • 如何使用start with connect by prior递归用法(×××××)

    在oracle数据库中,需要查询树结构类型数据的时候,使用start with connect by prior递归查询非常方便,指定一个起始节点,就可以查询到起始节点以上以及以下的所有树形层级。下面就来介绍下如何使用

    1. 为了能更好的介绍如何使用,首先需要创建一个测试表,然后结合例子来说明

      create table t_menu

      ( menu_id varchar2(32),

        parent_id    varchar2(32));

      insert into t_menu values ( '1', '' );

      insert into t_menu values ( '2', '1' );

      insert into t_menu values ( '3', '1' );

      insert into t_menu values ( '4', '2' );

      insert into t_menu values ( '5', '3' );

      insert into t_menu values ( '6', '4' );

      commit;

      select * from t_menu;

      创建了t_menu表,然后插入几条数据,再查询出表里数据

      如何使用start with connect by prior递归用法
    2.  

      再来看下创建的表结构,为了简单,这里就只有两个字段,menu_id和parent_id

      如何使用start with connect by prior递归用法
    3.  

      start with 递归查询起始条件

      connect by 连接语句,后面加上连接的条件

      为了演示向上和向下两个方向,我们这里选择menu_id为4的中间节点作为起始节点。

      SELECT

          t.menu_id,

          t.parent_id,

          level

      FROM

          t_menu t

      START WITH

          t.menu_id = '4'

      CONNECT BY

          t.parent_id = PRIOR  t.menu_id;

      这里注意下PRIOR的位置,和menu_id放一起,表示向下查询

      如何使用start with connect by prior递归用法
    4.  

      SELECT

          t.menu_id,

          t.parent_id,

          level

      FROM

          t_menu t

      START WITH

          t.menu_id = '4'

      CONNECT BY

          PRIOR  t.parent_id = t.menu_id;

      这里PRIOR和parent_id放一起,表示按照父节点方向,向上查询

      如何使用start with connect by prior递归用法
    5.  

      SELECT

          t.menu_id,

          t.parent_id,

          level

      FROM

          t_menu t

      START WITH

          t.parent_id = '4'

      CONNECT BY

          PRIOR  t.parent_id = t.menu_id;

      START WITH后面的起始条件,换成parent_id,则可以从结果中看出,level为1级的则以parent_id字段为条件做为起始节点

      如何使用start with connect by prior递归用法
    6.  

      以上的语句中,还可以添加where条件语句,这些条件是在递归查询的结果集中,再根据where的条件进行筛选的。

      如何使用start with connect by prior递归用法
  • 相关阅读:
    redis教程(三)-----redis缓存雪崩、缓存穿透、缓存预热
    dubbo入门学习(三)-----dubbo整合springboot
    dubbo入门学习(二)-----dubbo hello world
    spring cloud深入学习(十二)-----Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式
    spring cloud深入学习(十三)-----使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
    C#关键字params
    C#的lock关键字
    C#的yield关键字
    C#关键字ref和out
    C#的初始化器
  • 原文地址:https://www.cnblogs.com/liuys635/p/13431635.html
Copyright © 2011-2022 走看看