| 订阅 | 在线投稿
分享
 
 
当前位置: 王朝网络 >> oracle >> 在Oracle中选取有父子或树状关系的数据记录 zai Oracle zhong xuan qu you fu zi huo shu zhuang guan xi de shu ju ji lu
 

在Oracle中选取有父子或树状关系的数据记录

2008-07-29 06:19:14 编辑來源:互联网 繁體版 评论
 
 
本文为【在Oracle中选取有父子或树状关系的数据记录】的汉字拼音对照版显示拼音
  fuziguanxixingjilujihuozheshuzhuangguanxishujujilujishiwomenzairuanjiankaifazhongyizhongjiaoweichangjiandeshujuzuzhixingshilirubangongxitongzhongdezuzhijiagouliruyonghuxitongzhongdeshengfenchengshiquyulirudianzishangwuwangzhanzhongdechanpinfenleiliruliuyanbanxitongzhongdeliuyanhuifuguanxizhurucilei

  duiyuzheyileixingdeshujuwomenchangchanghui使shiyongzhucongbiaohuozhezhucongziduandefangfalaimanzujiegoushangdexuqiu

  suoweizhucongbiaojiushijianggejishujufenbiecunfangzaibutongdeshujubiaozhonglirudaleicunfangzaiyigeshujubiaoxiaoleicunfangzailingyigeshujubiaoyourushengfencunfangyigeshujubiaochengshicunfangzailingyigeshujubiaodanshizheyangyouyigewentijiushishujuyouduoshaocengjiubixujianliduoshaogeshujubiaozheyangbuliyushujujiegoucengcidekuozhanbirudianzishangwuwangzhanzhongdechanpinchuqiguihuazhiyoudaleihexiaoleisuizhechanpindezengjiaquefaxianjinyoudaleihexiaoleiyijingwufamanzuchanpindefenleixuqiuzheshihouhuixuyaotianjiayigezhongleidegainianweilemanzuzhegebianhuawomenjiuxuyaoxinzengyigezhongleideshujubiaozheyanghuizaochengjiaodadebiangengsuoyiwomenshuozhezhongfenbiaocunfanggejishujudeshejiyouyidingdejuxianxingerruguo使shiyonglingwaideyigejiejuebanfa-zhucongziduan-zenenggoujiaohaodejiejuezhegewentiyejiushishuowomenbashengfenhechengshichanpindedaleiyuxiaoleizhexiewulijiegouxiangtongluojijiegoubutongdeshujucunfangzaitongyigeshujubiaozhongyiIDheParentIDlianggeziduanlaibiaominggetiaoshujuzhijiandeluojiguanxi

  womenzaipengdaozhezhongshujujiegoudeshihouwangwangxiwangtongguoyicishujucaozuoxuanquyimouyitiaoshujuweiqierudiandequanbuxiangguanshujuliru访fangwenyitiaokeshidexinxishixiwangtongshichengxiangaikeshisuozaidechubumenxinxiyouliruhuoquyitiaoBBSliuyandeshihouxuyaojiangqiquanbudehuifuyijigegehuifudehuifudouyicixuanchuzhedoushizuichangjiandexuqiuxiamianwomenjiujieshaoruhezaiOralcezhong使shiyongyitiaoSQLyujucongyigeqierudianhuoqugaiqierudiandequanbuxiangguanxinxixiamianwomenjiangmoniyigeBBSdeliuyanyuhuifushujulaishuomingzhegeSQLyuju

  jiashewomenxianzaiyouruxiajiegoudeshuju(T_Topic)

  TopicID ParentID TopicTitle

  1 null qingjiaoOraclexuanqushuzhuangshuju

  2 1 re:qingjiaoOraclexuanqushuzhuangshuju

  3 1 qishizhiyaozheyangjiukeyi

  4 1 woyeyoutongyangdewentixuexi

  5 1 ding

  6 5 buyaofalajitieo~

  7 3 xuexiing

  8 3 bushiOracledefangfaya

  9 6 woxihuandingzadi

  10 9 fenghao

  dajiazhuyikanshangmiandezhexiejiluqishidoushiTopicID=1dejiludexiangguanjiluzijiluhuozhesunjiluzongguishihoudaijilu

  womenxianzaixuyao使shiyongyitiaoyujuxuanzeyiTopicIDwei1jiludequanbuhoudaijiluqingkanxiamiandeSQL:

  SELECT TopicID,ParentID,TopicTitle FROM T_TOPIC CONNECT BY PRIOR TopicID = ParentID START WITH TopciID = 1

  tongguozhetiaoSQLwomenjiukeyiyicicongTablezhongxuanquTopiID=1dejiludequanbuhoudaijilujiqizishenzhetiaoyujudeguanjianbufenjiushi CONNECT BY PRIOR... START WITHzhejuhuadebiaozhunyufaruxia

  SELECT FROM TABLENAME CONNECT BY {PRIOR lieming1 = lieming2 | lieming1 = PRIOR lieming2 } [START WITH];

  CONNECT BY guanjianziyongyushedingguanliandelianggeziduanPRIOR guanjianziyongyushedingyouxianshenzhaoziduanSTART WITH guanjianziyongyushedingqierudiankandaozhesangeguanjianzideshuomingdajiayidinghuixiangdaoyigewentijirankeyiduibutongdeziduanjinxingyouxianshenzhaonajirankeyitongguogenjiedianxuanchuqiquanbudezijiediannameyeyinggaikeyitongguozijiedianlaixuanquqiquanbudezuxianjiedianleyinweiPRIORdeyouxianshedingjiushizaishedingqisousuodefangxiangruguoPRIORshedingweizijiedianyouxianzehuixuanqubenjiediandequanbuhoudaijiedianfanzhiruguoPRIORshedingweifujiedianyouxianjiukeyinixiangdedaoquanbudezuxianjiedianlehuanshiyishangmiandeshujuweiliwomencongfenghaozhetiaojiluzuoweiqierudian使shiyongruxiadeSQL

  SELECT TopicID,ParentID,TopicTitle FROM T_TOPIC CONNECT BY TopicID = PRIOR ParentID START WITH TopicID = 10

  womenjiunengyicixingxuanchuruxiadeshujujiluyejiushicongfenghaozhetiaojilukaishidequanbuzuxianjiedian

  TopicID ParentID TopicTitle

  10 9 fenghao

  9 6 woxihuandingzadi

  6 5 buyaofalajitieo~

  5 1 ding

  1 null qingjiaoOraclexuanqushuzhuangshuju

  yishangwomenjiujiangjieleruhetongguoyigeqierudianzhaodaomouyigejiediandequanbuhoudaijiedianhuozhequanbuzuxianjiedianyexuninhuishuolewobingbuxuyaoxuanququanbuwozhiyaoxuanliangcengwodeshuzhiyuanxuxianshiliangcengenmeicuozheyehuishichangjiandexuqiuzhiyibuguobuyaojinwomenkeyitongguojiaruyigexindeguanjianzi Level 使shiyongzhegeguanjianziwomenjiukeyikongzhibeixuanchudeguanxicengjutideyongfawomenhuanshiyidiergeSQLxuqiuzuoweilizixianzaijiasheshixuyaocongfenghaozhetiaoshujuxiangshangzhaoliangcengzuxianjiedianchulaigairuhecaozuonerangwomenlaikanSQL

  SELECT Topic,ParentID,TopicTitle FROM T_TOPIC WHERE LEVEL <= 3 CONNECT BY TopicID = PRIOR ParentID START WITH TopicID = 10

  dajiayidingzhuyidaolezhetiaoSQLzhongduolezheyangyiduanziju LELVEL <= 3 zhegejiushiyonglaixiandingxuanqucengjidezijuzhetiaozijujiuquebaolewomenkeyixuanqubaokuojiedianyijiqixiangshangliangcengzuxianjiedianyigongsancengjiedianLEVEL zhegezijudebianhuayerangnidedaoyixiegengjiabiantai[-_-!]dejieguoliruwozhiyaoqudangqianjiediandezufujiediannazhiyaojiang Level shedingwei Level = 3qudiaoyigexiaoyuhaojiunengmanzuyigebiantaidexuqiule LEVEL chulekeyishedingweiputongdedayuxiaoyudengyudayudengyuxiaoyudengyuzhiwaishenzhihuankeyishedingwei BETWEEN X AND Yshizaishiyigehenbucuodeguanjianzikeyirangwomenmanzuhenduobiantaidexuqiu

  yishangjiushiguanyu CONNECTY BY ... PRIOR ... START WITH dejiben使shiyongfangfadangranleyonghudexuqiuyongyuanshiBTdebuguowoxiangxintongguoshangmiandezhexiejibenyingyongdezuheyidingkeyimanzudajiadexuqiu原文
 
 
 
 
上一篇《Oracle数据库SQLPLUS中几个常用set语句》
下一篇《c#中高效的excel导入oracle的方法》
 
 
 
 
 
 
 
 
 
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

如何磨出破洞牛仔裤?牛仔裤怎么剪破洞?

把牛仔裤磨出有线的破洞 1、具体工具就是磨脚石,下面垫一个硬物,然后用磨脚石一直磨一直磨,到把那块磨薄了,用手撕开就好了。出来的洞啊很自然的。需要猫须的话调几...

我就是扫描下图得到了敬业福和爱国福

先来看下敬业福和爱国福 今年春节,支付宝再次推出了“五福红包”活动,表示要“把欠大家的敬业福都还给大家”。 今天该活动正式启动,和去年一样,需要收集“五福”...

冰箱异味产生的原因和臭味去除的方法

有时候我们打开冰箱就会闻到一股异味,冰箱里的这种异味是因为一些物质发出的气味的混合体,闻起来让人恶心。 产生这些异味的主要原因有以下几点。 1、很多人有这种习...

 
 
父子关系型纪录集或者树状关系数据记录集是我们在软件开发中一种较为常见的数据组织形式。例如办公系统中的组织架构,例如用户系统中的省份城市区域,例如电子商务网站中的产品分类,例如留言板系统中的留言回复关系,诸如此类。 对于这一类型的数据我们常常会使用主从表或者主从字段的方法来满足结构上的需求。 所谓主从表就是将各级数据分别存放在不同的数据表中(例如大类存放在一个数据表,小类存放在另一个数据表;又如省份存放一个数据表,城市存放在另一个数据表),但是这样有一个问题,就是数据有多少层就必须建立多少个数据表,这样不利于数据结构层次的扩展,比如电子商务网站中的产品,初期规划只有大类和小类,随着产品的增加却发现仅有大类和小类已经无法满足产品的分类需求,这时候会需要添加一个中类的概念,为了满足这个变化我们就需要新增一个中类的数据表,这样会造成较大的变更,所以我们说这种分表存放各级数据的设计有一定的局限性。而如果使用另外的一个解决办法-主从字段-则能够较好的解决这个问题,也就是说我们把省份和城市,产品的大类与小类,这些物理结构相同、逻辑结构不同的数据存放在同一个数据表中,以ID和ParentID两个字段来表明各条数据之间的逻辑关系。 我们在碰到这种数据结构的时候往往希望通过一次数据操作选取以某一条数据为切入点的全部相关数据。例如访问一条科室的信息时,希望同时呈现该科室所在的处、部门信息,又例如获取一条BBS留言的时候,需要将其全部的回复以及各个回复的回复都一次选出,这都是最常见的需求。下面我们就介绍如何在Oralce中使用一条SQL语句从一个切入点获取该切入点的全部相关信息。下面我们将模拟一个BBS的留言与回复数据来说明这个SQL语句 假设我们现在有如下结构的数据(T_Topic) TopicID ParentID TopicTitle 1 null 请教Oracle选取树状数据 2 1 re:请教Oracle选取树状数据 3 1 其实只要这样就可以 4 1 我也有同样的问题,学习 5 1 顶! 6 5 不要发垃圾贴哦~ 7 3 学习ing 8 3 不是Oracle的方法呀 9 6 我喜欢顶,咋地 10 9 封号! 大家注意看,上面的这些记录其实都是TopicID=1的纪录的相关记录(子记录或者孙记录,总归是后代记录) 我们现在需要使用一条语句选择以TopicID为1记录的全部后代记录,请看下面的SQL: SELECT TopicID,ParentID,TopicTitle FROM T_TOPIC CONNECT BY PRIOR TopicID = ParentID START WITH TopciID = 1 通过这条SQL,我们就可以一次从Table中选取TopiID=1的纪录的全部后代记录及其自身。这条语句的关键部分就是 CONNECT BY PRIOR... START WITH,这句话的标准语法如下 SELECT FROM TABLENAME CONNECT BY {PRIOR 列名1 = 列名2 | 列名1 = PRIOR 列名2 } [START WITH]; CONNECT BY 关键字用于设定关联的两个字段,PRIOR 关键字用于设定优先参照字段,START WITH 关键字用于设定切入点。看到这三个关键字的说明,大家一定会想到一个问题,既然可以对不同的字段进行优先参照,那既然可以通过根节点选出其全部的子节点,那么也应该可以通过子节点来选取其全部的祖先节点了,因为PRIOR的优先设定就是在设定其搜索的方向。如果PRIOR设定为自节点优先,则会选取本节点的全部后代节点,反之如果PRIOR设定为父节点优先,就可以逆向得到全部的祖先节点了,还是以上面的数据为例,我们从“封号”这条记录作为切入点,使用如下的SQL SELECT TopicID,ParentID,TopicTitle FROM T_TOPIC CONNECT BY TopicID = PRIOR ParentID START WITH TopicID = 10 我们就能一次性选出如下的数据记录,也就是从“封号”这条记录开始的全部祖先节点 TopicID ParentID TopicTitle 10 9 封号! 9 6 我喜欢顶,咋地 6 5 不要发垃圾贴哦~ 5 1 顶! 1 null 请教Oracle选取树状数据 以上我们就讲解了如何通过一个切入点找到某一个节点的全部后代节点或者全部祖先节点,也许您会说了,我并不需要选取全部,我只要选两层,我的树只允许显示两层。嗯,没错,这也会是常见的需求之一,不过不要紧,我们可以通过加入一个新的关键字 Level ,使用这个关键字,我们就可以控制被选出的关系层。具体的用法,我们还是以第二个SQL需求作为例子,现在假设是需要从“封号”这条数据向上找两层祖先节点出来,该如何操作呢?让我们来看SQL SELECT Topic,ParentID,TopicTitle FROM T_TOPIC WHERE LEVEL <= 3 CONNECT BY TopicID = PRIOR ParentID START WITH TopicID = 10 大家一定注意到了这条SQL中多了这样一段子句 LELVEL <= 3 ,这个就是用来限定选取层级的子句,这条子句就确保了我们可以选取包括节点以及其向上两层祖先节点一共三层节点。LEVEL 这个子句的变化也让你得到一些更加变态[-_-!]的结果,例如我只要取当前节点的祖父节点,那只要将 Level 设定为 Level = 3,去掉一个小于号就能满足一个变态的需求了 LEVEL 除了可以设定为普通的大于、小于、等于、大于等于、小于等于之外,甚至还可以设定为 BETWEEN X AND Y,实在是一个很不错的关键字,可以让我们满足很多变态的需求。 以上就是关于 CONNECTY BY ... PRIOR ... START WITH 的基本使用方法。当然了,用户的需求永远是BT的,不过我相信通过上面的这些基本应用的组合,一定可以满足大家的需求。
󰈣󰈤
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
我们约会吧
漂亮白皙的模特
好纯好美的女生
靓丽的网络美女
痞子的甘南日记
疑是银河落九天
雪域坝上四——纯美色
冬日恋歌——西城杨柳弄轻柔
 
>>返回首页<<
 为你推荐
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 热帖排行
 
 
 
 
©2005- 王朝网络 版权所有