免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2160 | 回复: 5
打印 上一主题 下一主题

父节点写在一个字段里面的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-26 21:39 |只看该作者 |倒序浏览
10可用积分
drop table test2;
create table test2 (id varchar2(20) ,name varchar(10),parent_id  varchar2(20) );
insert into test2 values('1','a','0');
insert into test2 values('2','b','7');
insert into test2 values('3','c','2');
insert into test2 values('4','d','0');
insert into test2 values('6','e','3');
insert into test2 values('7','f','1');
insert into test2 values('8','g','9');
insert into test2 values('9','h','4');

SELECT id  ,name ,parent_id, level
FROM test2
start with parent_id ='7'
connect by prior id=parent_id

我希望得到的结果是:
2 b 7
3 c 2,0
6 e 3
高手帮我改造下。

论坛徽章:
0
2 [报告]
发表于 2008-06-26 21:50 |只看该作者
写错了第三条记录应该是   insert into test2 values('3','c','2,0');

论坛徽章:
0
3 [报告]
发表于 2008-06-26 22:10 |只看该作者
SELECT id  ,name ,parent_id
FROM test2
start with parent_id ='7'
connect by instr( parent_id,prior id||',')=1
or instr( parent_id,prior ','||id)>0 --这里有问题
or instr(parent_id,prior ','||id||',')>0
or prior id= parent_id;

写了一个但是如果在最后的时候要考虑。比如 33,20 。 20不是父节点。会有歧义

论坛徽章:
0
4 [报告]
发表于 2008-06-27 00:06 |只看该作者
SELECT id  ,name ,parent_id
FROM test2
start with parent_id ='7'
connect by instr( parent_id,prior id||',')=1 --第一个
or instr( parent_id,','||prior id)=( length(parent_id)-length(prior id) )--末尾  这里有问题
or instr(parent_id, ','||prior id||',')>0 --中间
or prior id= parent_id;  --父节点就一个
高手帮我改下,末尾的情况

论坛徽章:
0
5 [报告]
发表于 2008-06-27 12:29 |只看该作者
select * from test2
  start with id=6
  connect by prior round(parent_id)=id

论坛徽章:
0
6 [报告]
发表于 2008-06-27 21:19 |只看该作者
已经解决。
SELECT id  ,name ,parent_id
FROM test2
start with parent_id ='7'
connect by instr( ','||parent_id||',',','||prior id||',')>0
谢谢大家关注
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP