CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

递归返回查询中sql语句问题,谢谢

楼主tongtianming(菜鸟也有梦想)2005-02-23 15:59:22 在 Oracle / 开发 提问

表:tb  
  p_id     id     name  
  null     1       aa  
  1           2       bb  
  2           3       cc  
  3           4       dd  
  3           5       ee  
   
  希望出现的查询结果  
  列1       列2     列3     列4     列5     列6     列7     列8     列9  
  null       1       aa         2       bb         3       cc         4       dd  
  null       1       aa         2       bb         3       cc         5       ee  
   
  就是只按照level最大的行显示,但是如何能将上层节点作为列显示呢?  
  做多个表然后关联查询速度太慢,希望能直接用语句实现,谢谢! 问题点数:40、回复次数:9Top

1 楼qiaozhiwei(乔)回复于 2005-02-23 19:17:22 得分 0

不是很明白你的意思,你要找最短路径么?Top

2 楼bzszp(SongZip)回复于 2005-02-24 09:04:52 得分 0

不好实现。  
  :(Top

3 楼tongtianming(菜鸟也有梦想)回复于 2005-02-24 09:45:28 得分 0

我只是希望显示出9列的查询结果..请大家帮帮忙!用过程或者function都行Top

4 楼ashzs((可以包含中文字符))回复于 2005-02-24 10:21:18 得分 0

select   replace(replace(aa,'\','   '),',','   ')  
  from    
  (    
  SELECT   'null'   ||   SYS_CONNECT_BY_PATH(id   ||   '\'   ||   name,   ',')   as   aa    
  FROM   tree    
  START   WITH   p_id   =   'null'    
  CONNECT   BY   PRIOR   id   =   p_id  
  order   by   aa   desc  
  )   t  
  where   rownum<3;    
  试试看!!Top

5 楼tongtianming(菜鸟也有梦想)回复于 2005-02-24 10:49:15 得分 0

哎..这不是还是一列么,我是想1列变成9列Top

6 楼ashzs((可以包含中文字符))回复于 2005-02-24 11:18:01 得分 0

老兄,思路要宽一些嘛!  
  既然  
  select   replace(replace(aa,'\','   '),',','   ')  
  from    
  (    
  SELECT   'null'   ||   SYS_CONNECT_BY_PATH(id   ||   '\'   ||   name,   ',')   as   aa    
  FROM   tree    
  START   WITH   p_id   =   'null'    
  CONNECT   BY   PRIOR   id   =   p_id  
  order   by   aa   desc  
  )   t  
  where   rownum<3;    
  都可以在一列中查出你要的9列的内容,而且有分隔符"   ",  
  你把它拆分一下不就行了?!Top

7 楼tongtianming(菜鸟也有梦想)回复于 2005-02-24 12:01:50 得分 0

哎,写function拆分成为单独字串的方法我写了,效率太低啊!  
  直接写  
  SELECT   'null'   ||   SYS_CONNECT_BY_PATH(id   ||   '\'   ||   name,   ',')   as   aa    
  FROM   tree    
  START   WITH   p_id   =   'null'    
  CONNECT   BY   PRIOR   id   =   p_id  
  order   by   aa   desc  
  时间大约是0.049秒  
   
  但是调用function,拆成9列后时间就成了0.119秒了  
   
  这还只有9层,1700多行数据,如果层次和数据太多那就完蛋了萨。Top

8 楼ashzs((可以包含中文字符))回复于 2005-02-24 12:34:38 得分 40

问的问题:  
  你为什么非要是九个单独列数据?  
  而且你的拆分是怎么做的?  
  如果你选择完要的行数(像现在的2行),再进行拆分,  
  数据增加后的时间只是在  
  select   replace(replace(aa,'\','   '),',','   ')  
  from    
  (    
  SELECT   'null'   ||   SYS_CONNECT_BY_PATH(id   ||   '\'   ||   name,   ',')   as   aa    
  FROM   tree    
  START   WITH   p_id   =   'null'    
  CONNECT   BY   PRIOR   id   =   p_id  
  order   by   aa   desc  
  )   t  
  where   rownum<3;    
  会有所增长,而不会累加到你的拆分过程中呀!  
  总而言之,你要取得你要的数据以后,再进行拆分!!  
  Top

9 楼precipitant(塞北的雪)回复于 2005-08-05 14:15:05 得分 0

标记Top

相关问题

  • SQL查询语句
  • Sql 查询语句
  • SQL查询语句
  • sql语句查询
  • sql查询语句
  • sql查询语句
  • SQL查询语句
  • Sql查询语句
  • sql查询语句
  • 递归查询

关键词

  • 查询
  • null
  • aa
  • 显示
  • bb
  • cc

得分解答快速导航

  • 帖主:tongtianming
  • ashzs

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo