暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用Select WITH 子句递归查询分层数据

长河的笔记 2020-09-13
756

本文介绍如何使用WITH子句查询带有层次关系的数据。此功能是Oracle11.2版本发布的。另一种用于分层查询的子句是CONNECT BY,后续的文章会有专门介绍。


实验环境:

CentOS Linux release 7.6.1810 (Core)

Oracle Database 18c Express


创建测试数据

--此测试数据可以直接在网上下载,搜索"全国省市区数据库sql版"即可。
--这里为了演示我只选取辽宁的数据,其它省份的数据就忽略了。
CREATE TABLE CITY
(ID NUMBER PRIMARY KEY,
PID NUMBER DEFAULT NULL,
CITYNAME VARCHAR2(50) DEFAULT NULL,
TYPE NUMBER DEFAULT NULL
);  
insert into CITY (ID, PID, CITYNAME, TYPE) values (18,1,'辽宁',1);
insert into CITY (ID, PID, CITYNAME, TYPE) values (244,18,'沈阳',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (245,18,'大连',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (246,18,'鞍山',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (247,18,'本溪',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (248,18,'朝阳',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (249,18,'丹东',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (250,18,'抚顺',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (251,18,'阜新',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (252,18,'葫芦岛',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (253,18,'锦州',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (254,18,'辽阳',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (255,18,'盘锦',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (256,18,'铁岭',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (257,18,'营口',2);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2060,244,'沈河区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2061,244,'皇姑区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2062,244,'和平区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2063,244,'大东区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2064,244,'铁西区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2065,244,'苏家屯区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2066,244,'东陵区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2067,244,'沈北新区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2068,244,'于洪区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2069,244,'浑南新区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2070,244,'新民市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2071,244,'辽中县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2072,244,'康平县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2073,244,'法库县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2074,245,'西岗区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2075,245,'中山区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2076,245,'沙河口区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2077,245,'甘井子区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2078,245,'旅顺口区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2079,245,'金州区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2080,245,'开发区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2081,245,'瓦房店市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2082,245,'普兰店市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2083,245,'庄河市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2084,245,'长海县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2085,246,'铁东区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2086,246,'铁西区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2087,246,'立山区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2088,246,'千山区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2089,246,'岫岩',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2090,246,'海城市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2091,246,'台安县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2092,247,'本溪',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2093,247,'平山区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2094,247,'明山区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2095,247,'溪湖区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2096,247,'南芬区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2097,247,'桓仁',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2098,248,'双塔区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2099,248,'龙城区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2100,248,'喀喇沁左翼蒙古族自治县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2101,248,'北票市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2102,248,'凌源市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2103,248,'朝阳县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2104,248,'建平县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2105,249,'振兴区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2106,249,'元宝区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2107,249,'振安区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2108,249,'宽甸',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2109,249,'东港市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2110,249,'凤城市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2111,250,'顺城区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2112,250,'新抚区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2113,250,'东洲区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2114,250,'望花区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2115,250,'清原',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2116,250,'新宾',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2117,250,'抚顺县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2118,251,'阜新',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2119,251,'海州区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2120,251,'新邱区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2121,251,'太平区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2122,251,'清河门区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2123,251,'细河区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2124,251,'彰武县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2125,252,'龙港区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2126,252,'南票区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2127,252,'连山区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2128,252,'兴城市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2129,252,'绥中县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2130,252,'建昌县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2131,253,'太和区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2132,253,'古塔区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2133,253,'凌河区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2134,253,'凌海市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2135,253,'北镇市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2136,253,'黑山县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2137,253,'义县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2138,254,'白塔区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2139,254,'文圣区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2140,254,'宏伟区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2141,254,'太子河区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2142,254,'弓长岭区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2143,254,'灯塔市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2144,254,'辽阳县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2145,255,'双台子区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2146,255,'兴隆台区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2147,255,'大洼县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2148,255,'盘山县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2149,256,'银州区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2150,256,'清河区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2151,256,'调兵山市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2152,256,'开原市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2153,256,'铁岭县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2154,256,'西丰县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2155,256,'昌图县',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2156,257,'站前区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2157,257,'西市区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2158,257,'鲅鱼圈区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2159,257,'老边区',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2160,257,'盖州市',3);
insert into CITY (ID, PID, CITYNAME, TYPE) values (2161,257,'大石桥市',3);


基本的分层查询语法

递归分层查询必须包含两个查询块,这些查询块由UNION ALL合并。第一个查询块被称为"锚点",是递归的开始点,它可以由UNION ALL,UNION,INTERSECT或MINUS集合运算符组合的一个或多个查询块组成。第二个查询块称为递归成员,它必须与with子句的别名进行join此展开递归查询锚点查询的结果作为根节点。递归成员将子级依次添加到根节点。


WITH rec(id,pid,cityname,type) as
(
select id,pid,cityname,type from city where cityname='辽宁'
union all
select c.id,c.pid,c.cityname,c.type
from city c inner join rec r on r.id = c.pid
)
select id,pid,cityname,type from rec;


ID PID CITYNAME TYPE
---------- ---------- ------------------------------ ----------
18 1 辽宁 1
244 18 沈阳 2
245 18 大连 2
246 18 鞍山 2
247 18 本溪 2
248 18 朝阳 2
249 18 丹东 2
250 18 抚顺 2
251 18 阜新 2
252 18 葫芦岛 2
253 18 锦州 2


ID PID CITYNAME TYPE
---------- ---------- ------------------------------ ----------
254 18 辽阳 2
255 18 盘锦 2
256 18 铁岭 2
257 18 营口 2
2060 244 沈河区 3
2061 244 皇姑区 3
2062 244 和平区 3
...省略部分输出


输出排序规则

可以使用SEARCH指定排序规则,有2种方式:

  • BREADTH FIRST BY : 先返回同级数据,再返回下级数据。如上面的例子,查询辽宁省的所有市区,先返回的是辽宁,然后是沈阳,大连等同级别城市,再然后是城市下属区的名称依次显示 。默认为此排序规则。顺序如下:

    -->省

    ----->市

    ----->市

    -------->区

    -------->区

    ----------->街道...

  • DEPTH FIRST BY : 先返回下级数据,再返回同级数据。如下面的例子,同样查询辽宁省所有市区,先返回的都是辽宁,然后是沈阳,之后显示沈阳各区名称,再然后是大连,大连各区名称依次显示。顺序如下:

        -->省

        ----->市

        -------->区

        ----------->街道

        ----->市

        -------->区

        ----------->街道

SQL> WITH rec(id,pid,cityname,type) as
2 (
3 select id,pid,cityname,type from city222 where cityname in '辽宁'
4 union all
5 select c.id,c.pid,c.cityname,c.type from city222 c inner join rec r on r.id = c.pid
6 )
7 SEARCH DEPTH FIRST BY id SET order1
8 select id,pid,cityname,type from rec order by order1;


ID PID CITYNAME TYPE
---------- ---------- ------------------------------ ----------
18 1 辽宁 1
244 18 沈阳 2
2060 244 沈河区 3
2061 244 皇姑区 3
2062 244 和平区 3
2063 244 大东区 3
2064 244 铁西区 3
2065 244 苏家屯区 3
2066 244 东陵区 3
2067 244 沈北新区 3
2068 244 于洪区 3



标识数据的层次

上面例子中type列就是用于标识数据层次的,全国是0,省级别是1,市级别是2等。如果表中没有记录这样的层次,那么可以通过一个伪列来达到同样的目的,如下lvl伪列就同样可用于标识数据层次。

WITH rec(id,pid,cityname,lvl) as
(
select id,pid,cityname,1 as lvl from city where cityname in '辽宁'
union all
select c.id,c.pid,c.cityname,r.lvl+1 from city c inner join rec r on r.id = c.pid
)
SEARCH DEPTH FIRST BY id SET order1
select id,pid,cityname,lvl from rec order by order1;


ID PID CITYNAME LVL
---------- ---------- ------------------------------ ----------
18 1 辽宁 1
244 18 沈阳 2
2060 244 沈河区 3
...
2073 244 法库县 3
245 18 大连 2
2074 245 西岗区 3
...
2080 245 开发区 3
2081 245 瓦房店市 3
246 18 鞍山 2
2085 246 铁东区 3
...


扩展功能


1. 显示所有层次数据,模仿CONNECT BY子句的SYS_CONNECT_BY_PATH功能。

WITH rec(id,pid,cityname,type) AS
(
select a.id,a.pid,cast(a.cityname as varchar(100)) as cityname,a.type from city a where cityname='辽宁'
union all
select k.id,k.pid,cast(r.cityname||'->'||k.cityname as varchar(100)) as cityname,k.type from city k inner join rec r on r.id = k.pid
)
select id,cityname from rec order by 2,1;
ID CITYNAME
---------- ------------------------------
18 辽宁
249 辽宁->丹东
2109 辽宁->丹东->东港市
2106 辽宁->丹东->元宝区
2110 辽宁->丹东->凤城市
2108 辽宁->丹东->宽甸
2105 辽宁->丹东->振兴区
2107 辽宁->丹东->振安区
245 辽宁->大连
2075 辽宁->大连->中山区
2083 辽宁->大连->庄河市
2080 辽宁->大连->开发区
2078 辽宁->大连->旅顺口区
2082 辽宁->大连->普兰店市
2076 辽宁->大连->沙河口区
2081 辽宁->大连->瓦房店市
2077 辽宁->大连->甘井子区
2074 辽宁->大连->西岗区
2079 辽宁->大连->金州区
2084 辽宁->大连->长海县
250 辽宁->抚顺
2113 辽宁->抚顺->东洲区
      2117 辽宁->抚顺->抚顺县
      ... ...


2. 显示根节点ID, 模仿CONNECT BY子句的CONNECT_BY_ROOT的功能。

WITH rec(id,pid,cityname,root_id) as
(
select id,pid,cityname,id as root_id from city where cityname in '辽宁'
union all
select c.id,c.pid,c.cityname,r.root_id from city c inner join rec r on r.id = c.pid
)
SEARCH DEPTH FIRST BY id SET order1
select id,pid,cityname,root_id from rec order by order1;
ID PID CITYNAME ROOT_ID
---------- ---------- ------------------------------ ----------
18 1 辽宁 18
244 18 沈阳 18
2060 244 沈河区 18
2061 244 皇姑区 18
2062 244 和平区 18
2063 244 大东区 18
2064 244 铁西区 18
2065 244 苏家屯区 18
2066 244 东陵区 18
2067 244 沈北新区 18
2068 244 于洪区 18
2069 244 浑南新区 18
2070 244 新民市 18
2071 244 辽中县 18
... ...


3. 标识叶节点子节叶,模仿CONNECT BY子句的CONNECT_BY_ISLEAF功能。

--叶节点显示为0,子节点显示为1
WITH rec(id,pid,cityname,lvl) as
(
select id,pid,cityname,1 as lvl from city222 where cityname in '中国'
union all
select c.id,c.pid,r.cityname||'-'||c.cityname,r.lvl+1 from city222 c inner join rec r on r.id = c.pid
)
SEARCH DEPTH FIRST BY id SET order1
select id,pid,cityname,lvl,
CASE
WHEN LEAD(lvl, 1, 1) OVER (ORDER BY order1) <= lvl THEN 1
ELSE 0
END leaf
from rec order by order1;

ID PID CITYNAME LVL LEAF
---------- ---------- ------------------------------ ---------- ----------
18 1 辽宁 1 0
244 18 辽宁-沈阳 2 0
2060 244 辽宁-沈阳-沈河区 3 1
... ...
2073 244 辽宁-沈阳-法库县 3 1
245 18 辽宁-大连 2 0
2074 245 辽宁-大连-西岗区 3 1
... ...




>>Postgresql应用部分<<


实验环境:

CentOS Linux release 7.6.1810 (Core)

PostgreSQL 10.10


与Oracle语法相似,在PostgreSQL中使用分层查询示例如下:

1. 需要使用 RECURSIVE 关键字

2. 不需要强制在with中定义列别名

testdb=# with RECURSIVE cte as
(
select a.id,a.pid,cast(a.cityname as varchar(100)) as cityname,a.type from city a where cityname='辽宁'
union all
select k.id,k.pid,cast(c.cityname||'>'||k.cityname as varchar(100)) as cityname,k.type from city k inner join cte c on c.id = k.pid
 ) select id,pid,cityname,type from cte order by 2,1;
id | pid | cityname | type
-----+-----+-------------+------
18 | 1 | 辽宁 | 1
244 | 18 | 辽宁>沈阳 | 2
245 | 18 | 辽宁>大连 | 2
246 | 18 | 辽宁>鞍山 | 2
247 | 18 | 辽宁>本溪 | 2
248 | 18 | 辽宁>朝阳 | 2
249 | 18 | 辽宁>丹东 | 2
250 | 18 | 辽宁>抚顺 | 2
251 | 18 | 辽宁>阜新 | 2
... ...


注意:如果你的数据存在死循环,那么就需要特别注意了。在Oracle中会自动检测出数据循环错误,并给出提示。但是在PostgreSQL中我还不知道有这样的功能,下面的示例人为构造出死循环,结果sql就hang死了永远跑不出结果,悲剧了!!!

testdb=# update city set pid=249 where id=18;
UPDATE 1
testdb=# with RECURSIVE cte as
testdb-# (
testdb(# select a.id,a.pid,cast(a.cityname as varchar(100)) as cityname,a.type from city a where cityname='辽宁'
testdb(# union all
testdb(# select k.id,k.pid,cast(c.cityname||'>'||k.cityname as varchar(100)) as cityname,k.type from city k inner join cte c on c.id = k.pid
testdb(# )select id,pid,cityname,type from cte order by 2,1;
... hang ...


其它类似O的功能实现如下,或者也可以通过安装扩展或自定义函数实现。

with RECURSIVE cte as 
(
select a.id,a.pid,cast(a.cityname as varchar(100)) as cityname,1 as lvl,a.id as root_id from city a where cityname='北京'
union all
select k.id,k.pid,cast(c.cityname||'>'||k.cityname as varchar(100)) as cityname,c.lvl+1,c.root_id from city k inner join cte c on c.id = k.pid
)select id,pid,cityname,lvl,root_id from cte order by cityname;
id | pid | cityname | lvl | root_id
-----+-----+----------------------+-----+---------
2 | 1 | 北京 | 1 | 2
52 | 2 | 北京>市辖区 | 2 | 2
500 | 52 | 北京>市辖区>东城区 | 3 | 2
506 | 52 | 北京>市辖区>丰台区 | 3 | 2
515 | 52 | 北京>市辖区>大兴区 | 3 | 2
505 | 52 | 北京>市辖区>宣武区 | 3 | 2
516 | 52 | 北京>市辖区>密云县 | 3 | 2
504 | 52 | 北京>市辖区>崇文区 | 3 | 2
514 | 52 | 北京>市辖区>平谷区 | 3 | 2
517 | 52 | 北京>市辖区>延庆县 | 3 | 2
513 | 52 | 北京>市辖区>怀柔区 | 3 | 2
508 | 52 | 北京>市辖区>房山区 | 3 | 2
512 | 52 | 北京>市辖区>昌平区 | 3 | 2
503 | 52 | 北京>市辖区>朝阳区 | 3 | 2
502 | 52 | 北京>市辖区>海淀区 | 3 | 2
507 | 52 | 北京>市辖区>石景山区 | 3 | 2
501 | 52 | 北京>市辖区>西城区 | 3 | 2
510 | 52 | 北京>市辖区>通州区 | 3 | 2
509 | 52 | 北京>市辖区>门头沟区 | 3 | 2
 511 |  52 | 北京>市辖区>顺义区   |   3 |       2


PostgreSQL中也没有Oracle那样的排序规则,所以如果想定义排序就需要自已想办法了,如下就是一种方案。总之PG功能强大,能用到什么程度还得看你自身功力如何。

with RECURSIVE t1 as (
(
select id,pid,cast(cityname as varchar(50)) as cityname,array[id] as path from city where cityname='广东' order by path
)
union all
select c.id,c.pid,cast(a.cityname||'->'||c.cityname as varchar(50)) as cityname,a.path || c.id from t1 a inner join city c on a.id=c.pid
)
select * from t1 order by path;
id | pid | cityname | path
-----+-----+------------------------+------------
6 | 1 | 广东 | {6}
76 | 6 | 广东->广州 | {6,76}
692 | 76 | 广东->广州->从化市 | {6,76,692}
693 | 76 | 广东->广州->天河区 | {6,76,693}
694 | 76 | 广东->广州->东山区 | {6,76,694}
695 | 76 | 广东->广州->白云区 | {6,76,695}
696 | 76 | 广东->广州->海珠区 | {6,76,696}
697 | 76 | 广东->广州->荔湾区 | {6,76,697}
698 | 76 | 广东->广州->越秀区 | {6,76,698}
699 | 76 | 广东->广州->黄埔区 | {6,76,699}
700 | 76 | 广东->广州->番禺区 | {6,76,700}
701 | 76 | 广东->广州->花都区 | {6,76,701}
702 | 76 | 广东->广州->增城区 | {6,76,702}
703 | 76 | 广东->广州->从化区 | {6,76,703}
704 | 76 | 广东->广州->市郊 | {6,76,704}
77 | 6 | 广东->深圳 | {6,77}
705 | 77 | 广东->深圳->福田区 | {6,77,705}
706 | 77 | 广东->深圳->罗湖区 | {6,77,706}
707 | 77 | 广东->深圳->南山区 | {6,77,707}
708 | 77 | 广东->深圳->宝安区 | {6,77,708}
709 | 77 | 广东->深圳->龙岗区 | {6,77,709}
710 | 77 | 广东->深圳->盐田区 | {6,77,710}
78 | 6 | 广东->潮州 | {6,78}
711 | 78 | 广东->潮州->湘桥区 | {6,78,711}
712 | 78 | 广东->潮州->潮安县 | {6,78,712}
713 | 78 | 广东->潮州->饶平县 | {6,78,713}
79 | 6 | 广东->东莞 | {6,79}
714 | 79 | 广东->东莞->南城区 | {6,79,714}
... ...


希望以上内容能够对您有所帮助


END



文章转载自长河的笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论