论坛首页 综合技术论坛

oracle递归查询

浏览 2773 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-05   最后修改:2009-06-06

    昨天一个哥们遇到了一个问题,问题的大意估计大家都应该遇到过了;大致如下:有一张表,包含各个邮政局的上下级别关系;

如,广州邮政的上级是广东邮政,广东的邮政的上级是中国邮政,而广州邮政的下级有天河邮政,越秀邮政 等,需求就是随便输入一个地方邮政的名字,输出他的所有上级或者下级(如如果输入的是广州邮政,要求他的上级的话,那么广东邮政,广东的邮政的上级也一并输出) 上网查了一下用oracle的递归查询可以解决 大致如下:

 

 

create table test_post(
name varchar2(50) primary key,
pareName varchar2(50)
);

insert into test_post(name,parename)values('中国邮政','最高了');
insert into test_post(name,parename)values('广东邮政','中国邮政');
insert into test_post(name,parename)values('广州邮政','广东邮政');
insert into test_post(name,parename)values('深圳邮政','广东邮政');
insert into test_post(name,parename)values('东莞邮政','广东邮政');
insert into test_post(name,parename)values('天河邮政','广州邮政');
insert into test_post(name,parename)values('白云邮政','广州邮政');
insert into test_post(name,parename)values('越秀邮政','广州邮政');
insert into test_post(name,parename)values('上社邮政','天河邮政');
insert into test_post(name,parename)values('棠下邮政','天河邮政');
insert into test_post(name,parename)values('东埔邮政','天河邮政');
insert into test_post(name,parename)values('人民北邮政','越秀邮政');
insert into test_post(name,parename)values('解放南邮政','越秀邮政');
insert into test_post(name,parename)values('流花路邮政','越秀邮政');
insert into test_post(name,parename)values('三元里邮政','白云邮政');
insert into test_post(name,parename)values('机场路邮政','白云邮政');
insert into test_post(name,parename)values('新市墟邮政','白云邮政');




 

执行
select   t.name   from   test_post   t   start   with   t.name='广州邮政'  
connect   by     prior parename=   name

就可以了

 

connect by 语法请参考http://hi.baidu.com/zy1193/blog/item/6126af247788763bc89559a9.html一文

 

比如 CONNECT BY PRIOR org_id = parent_id就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录

论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics