昨天一个哥们遇到了一个问题,问题的大意估计大家都应该遇到过了;大致如下:有一张表,包含各个邮政局的上下级别关系;
如,广州邮政的上级是广东邮政,广东的邮政的上级是中国邮政,而广州邮政的下级有天河邮政,越秀邮政 等,需求就是随便输入一个地方邮政的名字,输出他的所有上级或者下级(如如果输入的是广州邮政,要求他的上级的话,那么广东邮政,广东的邮政的上级也一并输出) 上网查了一下用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,即本记录的父亲是上一条记录