当前位置: 代码迷 >> Oracle技术 >> 请高手指教START WITH CONNECT BY的有关问题
  详细解决方案

请高手指教START WITH CONNECT BY的有关问题

热度:114   发布时间:2016-04-24 08:08:40.0
请高手指教START WITH CONNECT BY的问题?
我写了如下语句
 
   SELECT  DISTINCT   a.AUT_STATNEW
               FROM R5AUTH a                         
               where AUT_ENTITY='E'   
              START WITH  a.AUT_STATUS ='A'
              CONNECT BY a.AUT_STATUS = PRIOR a.AUT_STATNEW   
 
问题1.代码运行的结果是 D,C,B (A得到B,B-C,C-D) 我现在只想得到 D就可以了,语句改怎么改?
     2.这个语句是先执行 where后面的条件还是 先START WITH   CONNECT BY 然后在执行where后面的 条件? 
------解决方案--------------------
引用:
我写了如下语句
 
   SELECT  DISTINCT   a.AUT_STATNEW
               FROM R5AUTH a                         
               where AUT_ENTITY='E'   
              START WITH  a.AUT_STATUS ='A'
              CONNECT BY a.AUT_STATUS = PRIOR a.AUT_STATNEW   
 
问题1.代码运行的结果是 D,C,B (A得到B,B-C,C-D) 我现在只想得到 D就可以了,语句改怎么改?
     2.这个语句是先执行 where后面的条件还是 先START WITH   CONNECT BY 然后在执行where后面的 条件? 


在最后面加一句
   AND LEVEL <= 1
------解决方案--------------------
引用:
 那你说的 结果显示的是,我想得到的是ZB04
Quote: 引用:

Quote: 引用:

我写了如下语句
 
   SELECT  DISTINCT   a.AUT_STATNEW
               FROM R5AUTH a                         
               where AUT_ENTITY='E'   
              START WITH  a.AUT_STATUS ='A'
              CONNECT BY a.AUT_STATUS = PRIOR a.AUT_STATNEW   
 
问题1.代码运行的结果是 D,C,B (A得到B,B-C,C-D) 我现在只想得到 D就可以了,语句改怎么改?
     2.这个语句是先执行 where后面的条件还是 先START WITH   CONNECT BY 然后在执行where后面的 条件? 


在最后面加一句
   AND LEVEL <= 1




根据lz的意思,AUT_STATNEW  是 AUT_STATUS 的叶子节点 (A得到B,B-C,C-D) ,也就是A-B-C-D是一个树形结构。 sql解析是自下而上,START WITH  a.AUT_STATUS ='A'
              CONNECT BY a.AUT_STATUS = PRIOR a.AUT_STATNEW  ,检索出这个树之后,D是最后的叶子节点,再在where 加上 LEVEL=4 (LEVEL 是一个伪列) :
 SELECT  DISTINCT   a.AUT_STATNEW
               FROM R5AUTH a                         
               where AUT_ENTITY='E'  AND LEVEL=4 
              START WITH  a.AUT_STATUS ='A'
              CONNECT BY a.AUT_STATUS = PRIOR a.AUT_STATNEW 

  相关解决方案