频道栏目
首页 > 数据库 > Oracle > 正文
oracle笛卡尔操作
2012-03-20 08:45:33           
收藏   我要投稿

Oracle递归查询及删除父子关系记录 


数据库中常要处理父子关系的记录,在oracle中可以用查询语句一次把所有的子记录全部取出来。例如下: 

t1 

t11 

     t111 

        t1111 

t12 

     t121 

        t1211 

 

db数据字段如下: 

task_id           task_name         t.parent_task_id 

000001            t1                      ***             

000002            t11                    000001 

000005            t12                    000001 

000003            t111                   000002 

000004            t1111                  000003 

000006            t121                   000005 

000007            t1211                  000006 

 

查询语句: 

select t.task_id ,t.task_name ,t.parent_task_id 

from t_task t 

start with task_id='000001' 

connect by prior task_id = parent_task_id; 

结果显示: 

task_id               task_name          t.parent_task_id 

000001                t1          

000002                t11                     000001 

000003                t111                    000002 

000004                t1111                   000003 

000005                t12                     000001 

000006                t121                    000005 

000007                t1211                   000006 

 

strat with 指定层次开始的条件,即是说满足这个条件的行即可以做为层次树的最顶层 

 

connect by prior指层之间的关联条件,即什么样的行是上层行的子行(自连接条件) 

 

select level,id,name,parentid from temptable2 

  connect by prior id(子层的列)=parentid(属于顶层的列)  start with id =1 

 

 

删除父子关系记录: 

 

delete from t_task where task_id in (select task_id from t_task connect by prior task_id=parentid start with task_id='000001'); 

 

 

 

作者 shaozhen

点击复制链接 与好友分享!回本站首页
相关TAG标签 笛卡尔
上一篇:oracle死锁解决方案
下一篇:Oracle物化视图定时全量刷新导致归档日志骤增
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站