oracle connect by level 应用
来源:互联网 发布:公司的软件过程 编辑:程序博客网 时间:2024/06/05 15:05
oracle connect by level 应用
分类: oracle 2012-09-20 16:58 754人阅读 评论(0) 收藏 举报
oracleinserttreetablesql
关键字:oracle connect by level 树状结构表
定义如下id 和 名称描述
1— 省长 <--- 2,3 (省长管辖市长、县长)
2— 市长 <--- 5,6 (市长管辖模范村村长和一个平民)
3— 县长 <--- 4,7,8,9 (县长管辖镇长和三个平民)
4— 镇长 <--- 10,11,12,13 (管辖四个平民)
5— 村长 <--- 14,15 (管辖两个平民)
其他(6-15)— 平民(没有管辖任何人)
只有省长、市长和县长能处理问题,那么每个人出了问题应该首先找谁来解决?
省长权利最大,自己出了问题自己解决,别人也没法知道; 可以认为在关系表里省长的父节点是自己。
Db代码
create table person(id int primary key, description varchar2(50));
create table relationship(child int, parent int, primary key(child,parent));
insert into person values(1,‘省长’);
insert into person values(2,‘市长’);
insert into person values(3,‘县长’);
insert into person values(4,‘镇长’);
insert into person values(5,‘村长’);
insert into person values(6,‘平民’);
...//省略的都是平民
insert into person values(15,‘平民’);
insert into relationship values(1,1); //关系如下
insert into relationship values(2,1);
insert into relationship values(3,1);
insert into relationship values(5,2);
insert into relationship values(6,2);
insert into relationship values(4,3);
insert into relationship values(7,3);
insert into relationship values(8,3);
insert into relationship values(9,3);
insert into relationship values(10,4);
insert into relationship values(11,4);
insert into relationship values(12,4);
insert into relationship values(13,4);
insert into relationship values(14,5);
insert into relationship values(15,5);
查看一下关系树:
Oracle代码
select rpad('---',(level-1)*3,'---')||child relation_tree
from relationship
start with child=parent
connect by nocycle prior child=parent; --结果如下
RELATION_TREE
------------------
1
---2
------5
---------14
---------15
------6
---3
------4
---------10
---------11
---------12
---------13
------7
------8
------9
已选择15行。
查看父子关系情况:
Oracle代码
select child,parent
from relationship
start with child=parent
connect by nocycle prior child=parent
order by parent; --结果如下
CHILD PARENT
---------- ----------
1 1
2 1
3 1
5 2
6 2
4 3
8 3
7 3
9 3
11 4
12 4
10 4
13 4
14 5
15 5
已选择15行。
下面要看一看:每个人有事时,首先找到谁来处理?不能每个人有事都找省长吧。
下面的sql使用了oracle家的两个变态函数:first_value & connect_by_root
Oracle代码
select distinct child ,first_value(parent)over(partition by child order by lv) parent
from(
select connect_by_root(r.child) child, p.description descr, level lv, r.parent
from person p ,relationship r
where p.id= r.parent
connect by nocycle prior r.parent=r.child
)
where descr in('省长', '市长', '县长')
order by parent,child; --结果如下
CHILD PARENT
---------- ----------
1 1
2 1
3 1
5 2
6 2
14 2
15 2
4 3
7 3
8 3
9 3
10 3
11 3
12 3
13 3
已选择15行。
这个sql到底行不行,再加条数据看看
Db代码
insert into person values(333,‘县长’);
insert into person values(555,‘村长’);
insert into person values(666,‘平民’);
insert into person values(777,‘平民’);
insert into relationship values(333,1);
insert into relationship values(555,333);
insert into relationship values(666, 555);
insert into relationship values(777,666);
--666这个平民有¥,777愿意跟着他(这条记录比较特殊)
分类: oracle 2012-09-20 16:58 754人阅读 评论(0) 收藏 举报
oracleinserttreetablesql
关键字:oracle connect by level 树状结构表
定义如下id 和 名称描述
1— 省长 <--- 2,3 (省长管辖市长、县长)
2— 市长 <--- 5,6 (市长管辖模范村村长和一个平民)
3— 县长 <--- 4,7,8,9 (县长管辖镇长和三个平民)
4— 镇长 <--- 10,11,12,13 (管辖四个平民)
5— 村长 <--- 14,15 (管辖两个平民)
其他(6-15)— 平民(没有管辖任何人)
只有省长、市长和县长能处理问题,那么每个人出了问题应该首先找谁来解决?
省长权利最大,自己出了问题自己解决,别人也没法知道; 可以认为在关系表里省长的父节点是自己。
Db代码
create table person(id int primary key, description varchar2(50));
create table relationship(child int, parent int, primary key(child,parent));
insert into person values(1,‘省长’);
insert into person values(2,‘市长’);
insert into person values(3,‘县长’);
insert into person values(4,‘镇长’);
insert into person values(5,‘村长’);
insert into person values(6,‘平民’);
...//省略的都是平民
insert into person values(15,‘平民’);
insert into relationship values(1,1); //关系如下
insert into relationship values(2,1);
insert into relationship values(3,1);
insert into relationship values(5,2);
insert into relationship values(6,2);
insert into relationship values(4,3);
insert into relationship values(7,3);
insert into relationship values(8,3);
insert into relationship values(9,3);
insert into relationship values(10,4);
insert into relationship values(11,4);
insert into relationship values(12,4);
insert into relationship values(13,4);
insert into relationship values(14,5);
insert into relationship values(15,5);
查看一下关系树:
Oracle代码
select rpad('---',(level-1)*3,'---')||child relation_tree
from relationship
start with child=parent
connect by nocycle prior child=parent; --结果如下
RELATION_TREE
------------------
1
---2
------5
---------14
---------15
------6
---3
------4
---------10
---------11
---------12
---------13
------7
------8
------9
已选择15行。
查看父子关系情况:
Oracle代码
select child,parent
from relationship
start with child=parent
connect by nocycle prior child=parent
order by parent; --结果如下
CHILD PARENT
---------- ----------
1 1
2 1
3 1
5 2
6 2
4 3
8 3
7 3
9 3
11 4
12 4
10 4
13 4
14 5
15 5
已选择15行。
下面要看一看:每个人有事时,首先找到谁来处理?不能每个人有事都找省长吧。
下面的sql使用了oracle家的两个变态函数:first_value & connect_by_root
Oracle代码
select distinct child ,first_value(parent)over(partition by child order by lv) parent
from(
select connect_by_root(r.child) child, p.description descr, level lv, r.parent
from person p ,relationship r
where p.id= r.parent
connect by nocycle prior r.parent=r.child
)
where descr in('省长', '市长', '县长')
order by parent,child; --结果如下
CHILD PARENT
---------- ----------
1 1
2 1
3 1
5 2
6 2
14 2
15 2
4 3
7 3
8 3
9 3
10 3
11 3
12 3
13 3
已选择15行。
这个sql到底行不行,再加条数据看看
Db代码
insert into person values(333,‘县长’);
insert into person values(555,‘村长’);
insert into person values(666,‘平民’);
insert into person values(777,‘平民’);
insert into relationship values(333,1);
insert into relationship values(555,333);
insert into relationship values(666, 555);
insert into relationship values(777,666);
--666这个平民有¥,777愿意跟着他(这条记录比较特殊)
0 0
- oracle connect by level 应用
- oracle connect by level 应用
- Oracle connect by level
- connect by level 的小应用
- oracle 递归 start with connect by level
- oracle connect by level 的用法
- ORACLE层次查询学习 level connect by
- Oracle connect by..start with/level
- oracle connect by level start with使用
- CONNECT BY LEVEL
- Oracle中connect by level以及start with的使用
- Oracle之Connect by,Level,Start with的使用
- 转:oracle connect by level start with使用
- oracle connect by函数的简单应用
- 行转列 SQL ,connect by level
- level、connect by、rownum使用
- connect by应用
- CONNECT BY 的应用
- 6个强大的AngularJS扩展应用
- Activity Testing
- OP-AMP ISSUES--NOISE
- Nginx+Tomcat+Memcached集群
- easyui和uploadify一同使用winform乱码问题
- oracle connect by level 应用
- 为什么线性规划问题的最优解一定能在可行域顶点中找到?
- Python下划线与命名规范
- java面向对象的设计原则
- (三)排序简介:算法效率
- 异常处理基础知识
- Cygwin 编译器和工具
- 分页pager的使用
- 常用学习资源