本文介绍如何使用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 allselect c.id,c.pid,c.cityname,c.typefrom city c inner join rec r on r.id = c.pid)select id,pid,cityname,type from rec;ID PID CITYNAME TYPE---------- ---------- ------------------------------ ----------18 1 辽宁 1244 18 沈阳 2245 18 大连 2246 18 鞍山 2247 18 本溪 2248 18 朝阳 2249 18 丹东 2250 18 抚顺 2251 18 阜新 2252 18 葫芦岛 2253 18 锦州 2ID PID CITYNAME TYPE---------- ---------- ------------------------------ ----------254 18 辽阳 2255 18 盘锦 2256 18 铁岭 2257 18 营口 22060 244 沈河区 32061 244 皇姑区 32062 244 和平区 3...省略部分输出
输出排序规则
可以使用SEARCH指定排序规则,有2种方式:
BREADTH FIRST BY : 先返回同级数据,再返回下级数据。如上面的例子,查询辽宁省的所有市区,先返回的是辽宁,然后是沈阳,大连等同级别城市,再然后是城市下属区的名称依次显示 。默认为此排序规则。顺序如下:
-->省
----->市
----->市
-------->区
-------->区
----------->街道...
DEPTH FIRST BY : 先返回下级数据,再返回同级数据。如下面的例子,同样查询辽宁省所有市区,先返回的都是辽宁,然后是沈阳,之后显示沈阳各区名称,再然后是大连,大连各区名称依次显示。顺序如下:
-->省
----->市
-------->区
----------->街道
----->市
-------->区
----------->街道
SQL> WITH rec(id,pid,cityname,type) as2 (3 select id,pid,cityname,type from city222 where cityname in '辽宁'4 union all5 select c.id,c.pid,c.cityname,c.type from city222 c inner join rec r on r.id = c.pid6 )7 SEARCH DEPTH FIRST BY id SET order18 select id,pid,cityname,type from rec order by order1;ID PID CITYNAME TYPE---------- ---------- ------------------------------ ----------18 1 辽宁 1244 18 沈阳 22060 244 沈河区 32061 244 皇姑区 32062 244 和平区 32063 244 大东区 32064 244 铁西区 32065 244 苏家屯区 32066 244 东陵区 32067 244 沈北新区 32068 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 allselect 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 order1select id,pid,cityname,lvl from rec order by order1;ID PID CITYNAME LVL---------- ---------- ------------------------------ ----------18 1 辽宁 1244 18 沈阳 22060 244 沈河区 3...2073 244 法库县 3245 18 大连 22074 245 西岗区 3...2080 245 开发区 32081 245 瓦房店市 3246 18 鞍山 22085 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 allselect 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 allselect 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 order1select id,pid,cityname,root_id from rec order by order1;ID PID CITYNAME ROOT_ID---------- ---------- ------------------------------ ----------18 1 辽宁 18244 18 沈阳 182060 244 沈河区 182061 244 皇姑区 182062 244 和平区 182063 244 大东区 182064 244 铁西区 182065 244 苏家屯区 182066 244 东陵区 182067 244 沈北新区 182068 244 于洪区 182069 244 浑南新区 182070 244 新民市 182071 244 辽中县 18... ...
3. 标识叶节点子节叶,模仿CONNECT BY子句的CONNECT_BY_ISLEAF功能。
--叶节点显示为0,子节点显示为1WITH rec(id,pid,cityname,lvl) as(select id,pid,cityname,1 as lvl from city222 where cityname in '中国'union allselect 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 order1select id,pid,cityname,lvl,CASEWHEN LEAD(lvl, 1, 1) OVER (ORDER BY order1) <= lvl THEN 1ELSE 0END leaffrom rec order by order1;ID PID CITYNAME LVL LEAF---------- ---------- ------------------------------ ---------- ----------18 1 辽宁 1 0244 18 辽宁-沈阳 2 02060 244 辽宁-沈阳-沈河区 3 1... ...2073 244 辽宁-沈阳-法库县 3 1245 18 辽宁-大连 2 02074 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 allselect 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 | 辽宁 | 1244 | 18 | 辽宁>沈阳 | 2245 | 18 | 辽宁>大连 | 2246 | 18 | 辽宁>鞍山 | 2247 | 18 | 辽宁>本溪 | 2248 | 18 | 辽宁>朝阳 | 2249 | 18 | 辽宁>丹东 | 2250 | 18 | 辽宁>抚顺 | 2251 | 18 | 辽宁>阜新 | 2... ...
注意:如果你的数据存在死循环,那么就需要特别注意了。在Oracle中会自动检测出数据循环错误,并给出提示。但是在PostgreSQL中我还不知道有这样的功能,下面的示例人为构造出死循环,结果sql就hang死了永远跑不出结果,悲剧了!!!
testdb=# update city set pid=249 where id=18;UPDATE 1testdb=# with RECURSIVE cte astestdb-# (testdb(# select a.id,a.pid,cast(a.cityname as varchar(100)) as cityname,a.type from city a where cityname='辽宁'testdb(# union alltestdb(# 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.pidtestdb(# )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 allselect 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 | 252 | 2 | 北京>市辖区 | 2 | 2500 | 52 | 北京>市辖区>东城区 | 3 | 2506 | 52 | 北京>市辖区>丰台区 | 3 | 2515 | 52 | 北京>市辖区>大兴区 | 3 | 2505 | 52 | 北京>市辖区>宣武区 | 3 | 2516 | 52 | 北京>市辖区>密云县 | 3 | 2504 | 52 | 北京>市辖区>崇文区 | 3 | 2514 | 52 | 北京>市辖区>平谷区 | 3 | 2517 | 52 | 北京>市辖区>延庆县 | 3 | 2513 | 52 | 北京>市辖区>怀柔区 | 3 | 2508 | 52 | 北京>市辖区>房山区 | 3 | 2512 | 52 | 北京>市辖区>昌平区 | 3 | 2503 | 52 | 北京>市辖区>朝阳区 | 3 | 2502 | 52 | 北京>市辖区>海淀区 | 3 | 2507 | 52 | 北京>市辖区>石景山区 | 3 | 2501 | 52 | 北京>市辖区>西城区 | 3 | 2510 | 52 | 北京>市辖区>通州区 | 3 | 2509 | 52 | 北京>市辖区>门头沟区 | 3 | 2511 | 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 allselect 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





