文档章节

oracle一条语句递归查询父子关系

YaZi-Liu
 YaZi-Liu
发布于 2016/06/12 17:28
字数 356
阅读 161
收藏 6

1  建表:

CREATE TABLE test_tree (
  test_id   INT  NOT NULL,
  pid       INT,
  test_val  VARCHAR(10),
  PRIMARY KEY (test_id)
);
INSERT INTO test_tree VALUES(1, 0,   '.NET');
INSERT INTO test_tree VALUES(2, 1,      'C#');
INSERT INTO test_tree VALUES(3, 1,      'J#');
INSERT INTO test_tree VALUES(4, 1,      'ASP.NET');
INSERT INTO test_tree VALUES(5, 1,      'VB.NET');
INSERT INTO test_tree VALUES(6, 0,   'J2EE');
INSERT INTO test_tree VALUES(7, 6,      'EJB');
INSERT INTO test_tree VALUES(8, 6,      'Servlet');
INSERT INTO test_tree VALUES(9, 6,      'JSP');
INSERT INTO test_tree VALUES(10, 0,  'Database');
INSERT INTO test_tree VALUES(11, 10,    'DB2');
INSERT INTO test_tree VALUES(12, 10,    'MySQL');
INSERT INTO test_tree VALUES(13, 10,    'Oracle');
INSERT INTO test_tree VALUES(14, 10,    'SQL Server');
INSERT INTO test_tree VALUES(15, 13,    'PL/SQL');
INSERT INTO test_tree VALUES(16, 15,    'Function');
INSERT INTO test_tree VALUES(17, 15,    'Procedure');
INSERT INTO test_tree VALUES(18, 15,    'Package');
INSERT INTO test_tree VALUES(19, 15,    'Cursor');
INSERT INTO test_tree VALUES(20, 14,    'T-SQL');

使用 START WITH  CONNECT BY 语句实现树状查询

使用 SYS_CONNECT_BY_PATH  函数,获取节点的全路径.

COLUMN "FullPath" 

2:查询语句

SELECT
  LEVEL,
  test_id,
  test_val,
  SYS_CONNECT_BY_PATH(test_val, '\') AS "FullPath"
FROM
  test_tree
START WITH
  pid =0
CONNECT BY PRIOR test_id = pid
ORDER SIBLINGS BY test_val;

结果:

     LEVEL    TEST_ID TEST_VAL             FullPath
---------- ---------- -------------------- -----------------------------------
         1          1 .NET                 \.NET
         2          4 ASP.NET              \.NET\ASP.NET
         2          2 C#                   \.NET\C#
         2          3 J#                   \.NET\J#
         2          5 VB.NET               \.NET\VB.NET
         1         10 Database             \Database
         2         11 DB2                  \Database\DB2
         2         12 MySQL                \Database\MySQL
         2         13 Oracle               \Database\Oracle
         3         15 PL/SQL               \Database\Oracle\PL/SQL
         4         19 Cursor               \Database\Oracle\PL/SQL\Cursor
     LEVEL    TEST_ID TEST_VAL             FullPath
---------- ---------- -------------------- -----------------------------------
         4         16 Function             \Database\Oracle\PL/SQL\Function
         4         18 Package              \Database\Oracle\PL/SQL\Package
         4         17 Procedure            \Database\Oracle\PL/SQL\Procedure
         2         14 SQL Server           \Database\SQL Server
         3         20 T-SQL                \Database\SQL Server\T-SQL
         1          6 J2EE                 \J2EE
         2          7 EJB                  \J2EE\EJB
         2          9 JSP                  \J2EE\JSP
         2          8 Servlet              \J2EE\Servlet

本文转载自:http://blog.csdn.net/wind520/article/details/9670077

共有 人打赏支持
上一篇: Spring+Quartz(一)
下一篇: myeclipse内存不足
YaZi-Liu
粉丝 2
博文 30
码字总数 35566
作品 0
海淀
私信 提问
PostgreSQL 递归查询

数据库中的数据存在父子关系(单继承,每一条记录只有一个父亲). 如果要查询一条记录以及他的所有子记录,或者要查询一条记录以及他的所有父记录.那么递归查询就再合适不过了.可以简化复杂的SQL...

kenshiro
2013/09/09
0
1
Oracle中start with...connect by子句的用法

Oracle中start with...connect by子句的用法Oracle中start with…connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是:select … from tablenamestart with 条件1conn...

什么是程序员
2016/11/11
5
0
oracle树状查询-connect by

connect by 是结构化查询中用到的,其基本语法是:   select ... from tablename start with 条件1   connect by 条件2   where 条件3;   例:   select from table   start wit...

hiqj
2016/03/01
129
0
oracle中进行简单树查询(递归查询) ,PRIOR、CONNECT_BY_ROOT的使用

select ADDEPARTMENTCODE, ADDEPARTMENTUPLEVEL, ADDEPARTMENTNAME from (select ADDEPARTMENTCODE, ADDEPARTMENTUPLEVEL, ADDEPARTMENTNAME from ADDEPTARCHITECTURE order by ADDEPARTMENT......

吕兵阳
2014/08/30
0
0
oracle递归函数

oracle start with connect by 用法 oracle中 connect by prior 递归算法 Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是: select ... fro...

泡海椒
2016/03/14
9
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker搭建代码质量检测平台-SonarQube(中文版)

Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量。通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言...

Jacktanger
16分钟前
0
0
Windows / Linux / MacOS 设置代理上网的方法汇总

本文汇总了 Windows / Linux / MacOS 设置代理上网的各种方法,总结如下: 1、设置系统代理(Windows、Linux、MacOS) 2、设置代理插件(Chrome、Chromium、Firefox、Opera、QQ等浏览器) 3、...

sunboy2050
昨天
2
0
自定义 Maven 的 repositories

有时,应用中需要一些比较新的依赖,而这些依赖并没有正式发布,还是处于milestone或者是snapshot阶段,并不能从中央仓库或者镜像站上下载到。此时,就需要 自定义Maven的<repositories>。 ...

waylau
昨天
2
0
徒手写一个es6代码库

mkdir democd demonpm initnpm install -g babelnpm install -g babel-clinpm install --save-dev babel-preset-es2015-node5 在项目目录创建两个文件夹 functional-playground ......

lilugirl
昨天
3
0
linux定位应用问题的一些常用命令,特别针对内存和线程分析的dump命令

1.jps找出进程号,找到对应的进程号后面才好继续操作 2.linux查看进程详细信息 ps -ef | grep 进程ID 3. dump内存信息 Jmap -dump:format=b,file=YYMMddhhmm.dump pid 4.top查看cpu占用信息 ...

noob_chr
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部