一,表结构如下:
create table area(
id NUMBER(19) NOT NULL,
parent_id NUMBER(19) NOT NULL,
name VARCHAR2(40)
);
二,数据如下:
id parent_id name1 0 中国
2 1 江西
3 1 湖南
4 1 湖北
5 2 赣州
6 2 南昌
7 2 九江
8 7 修水
9 7 永修
10 7 武宁
11 7 湖口
12 8 白岭
13 8 全丰
14 8 渣津
15 8 古市
三,查询语句:
1,查询中国所有省份:
select id,parent_id,name from area t where parent_id = 1;结果如下:
id parent_id name
2 1 江西
3 1 湖南
4 1 湖北
2,查询江西所有的市和镇(乡): (查询某个节点下的所有节点,包括当前节点)
select id,parent_id,name from area t start with id = 2 connect by prior id = parent_id;结果如下:
id parent_id name
2 1 江西
5 2 赣州
6 2 南昌
7 2 九江
8 7 修水
9 7 永修
10 7 武宁
11 7 湖口
12 8 白岭
13 8 全丰
14 8 渣津
15 8 古市
3,查询白岭镇(乡)属性哪个省的? (查询某个节点属于哪个父节点下?)
select id,parent_id,name from area t start with id = 12 connect by prior parent_id = id;上面语句查询出id值为12节点的所有父节点(包括当前节点):
结果如下:
id parent_id name
1 0 中国
2 1 江西
7 2 九江
8 7 修水
12 8 白岭
select id,parent_id,name from (
select id,parent_id,name from area t start with id = 12 connect by prior parent_id = id
) where parent_id = 1
上面语句查询出白岭镇(乡)属性哪个省的. 查询条件:江西的parent_id为1.
结果如下:
id parent_id name
2 1 江西
4,查询递归路径:
select id,parent_id,name,SUBSTR(SYS_CONNECT_BY_PATH(NAME,'->'),2) name_path from area t start with id = 2 connect by prior id = parent_id;结果如下:
id parent_id name name_path
2 1 江西
5 2 赣州 江西->赣州
6 2 南昌 江西->南昌
7 2 九江 江西->九江
8 7 修水 江西->九江->修水
9 7 永修 江西->九江->永修
10 7 武宁 江西->九江->武宁
11 7 湖口 江西->九江->湖口
12 8 白岭 江西->九江->修水->白岭
13 8 全丰 江西->九江->修水->全丰
14 8 渣津 江西->九江->修水->渣津
15 8 古市 江西->九江->修水->古市