17,377
社区成员
发帖
与我相关
我的任务
分享
WITH TB(DATACODE,DATANAME,PARENTCODE) AS
(
SELECT 1,'AAA',0 FROM DUAL UNION
SELECT 2,'BBB',1 FROM DUAL UNION
SELECT 3,'CCC',2 FROM DUAL UNION
SELECT 4,'DDD',0 FROM DUAL UNION
SELECT 5,'EEE',4 FROM DUAL
)
,TW(DATACODE) AS
(
SELECT DATACODE FROM TB WHERE PARENTCODE = 0
)
SELECT TB.*,PARENTCODE ROOTCODE FROM TB WHERE PARENTCODE = 0 UNION
SELECT DISTINCT TB.*,CONNECT_BY_ROOT(PARENTCODE) ROOTCODE FROM TB,TW
START WITH (PARENTCODE = TW.DATACODE)
CONNECT BY PRIOR TB.DATACODE =TB.PARENTCODE
with tb as
(select 1 datacode,'AAA'dataname, 0 parentcode from dual union all
select 2 ,'BBB', 1 from dual union all
select 3 ,'CCC', 2 from dual) --临时表
select tb.*,
decode(connect_by_root parentcode,parentcode,0,1) -- 根节点,然后和父节点比较
from tb
start with parentcode=0 --从0开始,即根节点0
connect by prior datacode=parentcode