我写了如下语句
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