表:tb
p_id id name
null 1 aa
1 2 bb
2 3 cc
3 4 dd
3 5 ee希望出现的查询结果
列1 列2 列3 列4 列5 列6 列7 列8 列9
null 1 aa 2 bb 3 cc 4 dd
null 1 aa 2 bb 3 cc 5 ee就是只按照level最大的行显示,但是如何能将上层节点作为列显示呢?
做多个表然后关联查询速度太慢,希望能直接用语句实现,谢谢!
p_id id name
null 1 aa
1 2 bb
2 3 cc
3 4 dd
3 5 ee希望出现的查询结果
列1 列2 列3 列4 列5 列6 列7 列8 列9
null 1 aa 2 bb 3 cc 4 dd
null 1 aa 2 bb 3 cc 5 ee就是只按照level最大的行显示,但是如何能将上层节点作为列显示呢?
做多个表然后关联查询速度太慢,希望能直接用语句实现,谢谢!
from
(
SELECT 'null' || SYS_CONNECT_BY_PATH(id || '\' || name, ',') as aa
FROM tree
START WITH p_id = 'null'
CONNECT BY PRIOR id = p_id
order by aa desc
) t
where rownum<3;
试试看!!
既然
select replace(replace(aa,'\',' '),',',' ')
from
(
SELECT 'null' || SYS_CONNECT_BY_PATH(id || '\' || name, ',') as aa
FROM tree
START WITH p_id = 'null'
CONNECT BY PRIOR id = p_id
order by aa desc
) t
where rownum<3;
都可以在一列中查出你要的9列的内容,而且有分隔符" ",
你把它拆分一下不就行了?!
直接写
SELECT 'null' || SYS_CONNECT_BY_PATH(id || '\' || name, ',') as aa
FROM tree
START WITH p_id = 'null'
CONNECT BY PRIOR id = p_id
order by aa desc
时间大约是0.049秒但是调用function,拆成9列后时间就成了0.119秒了这还只有9层,1700多行数据,如果层次和数据太多那就完蛋了萨。
你为什么非要是九个单独列数据?
而且你的拆分是怎么做的?
如果你选择完要的行数(像现在的2行),再进行拆分,
数据增加后的时间只是在
select replace(replace(aa,'\',' '),',',' ')
from
(
SELECT 'null' || SYS_CONNECT_BY_PATH(id || '\' || name, ',') as aa
FROM tree
START WITH p_id = 'null'
CONNECT BY PRIOR id = p_id
order by aa desc
) t
where rownum<3;
会有所增长,而不会累加到你的拆分过程中呀!
总而言之,你要取得你要的数据以后,再进行拆分!!