下面的写法有什么不同?
完整的原始数据如下:
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