一个简单的递归语句,不同的写法有什么不同

来源:互联网 发布:bt文件下载软件 编辑:程序博客网 时间:2024/06/03 21:37
 

下面的写法有什么不同?

完整的原始数据如下:

select * from zzzzz;

第一种写法

select *

from zzzzz

start with id = '2'

connect by prior parentid like '%' || id || '%'

第二种写法

select *

from zzzzz

start with id = '2'

connect by prior instr(parentid, id) != 0

第三种写法

select *

from zzzzz

start with id = '2'

connect by prior instr(parentid, id) > 0

请问,后两种写法与第一种写法有什么不同?为什么结果不一样?

回答:关键在于,要搞清楚“于prior到底是什么?”,搞清楚这一点,就豁然开朗了。prior的意思是“上一条记录”,比如,第一种写法里面的prior parentid表示上一条记录的parentid,因此,第一种写法里面的connect by prior parentid like '%' || id || '%',表示的是上一条记录的parentid的内容,包含本条记录的id,所以第二种写法和第三种写法所犯的错误是一样的,就是prior的位置错了,应该放在parentid前面,如下所示:

改造后的第二种写法(注意prior现在的位置)

select *

from zzzzz

start with id = '2'

connect by instr(prior parentid, id) != 0

改造后的第三种写法(注意prior现在的位置)

select *

from zzzzz

start with id = '2'

connect by instr(prior parentid, id) > 0

原创粉丝点击