有的情况下,我们需要用递归的方法整理数据,这才程序中很容易做到,但是在数据库中,用SQL语句怎么实现?下面我以最典型的树形结构来说明下如何在Oracle使用递归查询。
为了说明方便,创建一张数据库表,用于存储一个简单的树形结构
Sql代码
create table TEST_TREE
(
ID NUMBER,
PID NUMBER,
IND NUMBER,
NAME VARCHAR2(32)
)
create table TEST_TREE
(
ID NUMBER,
PID NUMBER,
IND NUMBER,
NAME VARCHAR2(32)
)
ID是主键,PID是父节点ID,IND是排序字段,NAME是节点名称。初始化几条测试数据。
IDPIDINDNAME
1
0
1
根节点
2
1
1
一级菜单1
3
1
2
一级菜单2
4
1
2
一级菜单3
5
2
1
一级1子1
6
2
2
一级1子2
7
4
1
一级3子1
8
4
2
一级3子2
9
4
3
一级3子3
10
4
0
一级3子0
一、基本使用:
在Oracle中,递归查询要用到start with 。。。。connect by prior。。。
具体格式是:
Sql代码
SELECT column
from table_name
START WITH column=value
CONNECT BY PRIOR 父主键=子外键
SELECT column
from table_name
START WITH column=value
CONNECT BY PRIOR 父主键=子外键
对于本例来说,就是:
Sql代码
select d.* from test_tree d
start with d.pid=0
connect by prior d.id=d.pid
select d.* from test_tree d
start with d.pid=0
connect by prior d.id=d.pid
查询结果如下:
IDPIDINDNAME
1
0
1
根节点
2
1
1
一级菜单1
5
2
1
一级1子1
6
2
2
一级1子2
3
1
2
一级菜单2
4
1
2
一级菜单3
7
4
1
一级3子1
8
4
2
�