表结构是这样的
id name parent_id
1 name_1 null
2 name_2 1
3 name_3 null
4 name_4 1
5 name_5 3
6 name_6 1
7 name_7 3
8 name_8 4
9 name_9 2
10 name_10 1
id为主键,其中parent_id取得是本表中的主键ID,可为空,为空表示最顶层,1表示主键为1的下一层,3表示在主键为3的下一层
现在我须要把数据排序,首先第一条是一条主键为空的最顶层的数据,例如主键为1的,其次是parent_id是1的数据例如id等于2的,然后取parent_id为2的,如果没有则继续找parent_id为1的,依次类推
排序出来的样子如下:
1 name_1 null
2 name_2 1
9 name_9 2
4 name_1 1
8 name_8 4
6 name_6 1
10 name_10 1
3 name_3 null
5 name_5 3
7 name_7 3
id name parent_id
1 name_1 null
2 name_2 1
3 name_3 null
4 name_4 1
5 name_5 3
6 name_6 1
7 name_7 3
8 name_8 4
9 name_9 2
10 name_10 1
id为主键,其中parent_id取得是本表中的主键ID,可为空,为空表示最顶层,1表示主键为1的下一层,3表示在主键为3的下一层
现在我须要把数据排序,首先第一条是一条主键为空的最顶层的数据,例如主键为1的,其次是parent_id是1的数据例如id等于2的,然后取parent_id为2的,如果没有则继续找parent_id为1的,依次类推
排序出来的样子如下:
1 name_1 null
2 name_2 1
9 name_9 2
4 name_1 1
8 name_8 4
6 name_6 1
10 name_10 1
3 name_3 null
5 name_5 3
7 name_7 3
create table t1 (id number(5),name varchar2(10),p_id number(5));insert into t1 values (1,'name_1',null);
insert into t1 values (2,'name_2',1);
insert into t1 values (3,'name_3',null);
insert into t1 values (4,'name_4',1);
insert into t1 values (5,'name_5',3);
insert into t1 values (6,'name_6',1);
insert into t1 values (7,'name_7',3);
insert into t1 values (8,'name_8',4);
insert into t1 values (9,'name_9',2);
insert into t1 values (10,'name_10',1);
commit;
select id,name,p_id
from t1
start with p_id is null
connect by prior id = p_id
id name p_id
-------------------------------
1 1 name_1
2 2 name_2 1
3 9 name_9 2
4 4 name_4 1
5 8 name_8 4
6 6 name_6 1
7 10 name_10 1
8 3 name_3
9 5 name_5 3
10 7 name_7 3