irpas技术客

这道 Mysql 的解题思想,值得学习!_Wu_Candy

网络 2712

题目:

(1). 前置条件:

有如下数据集A,表查询结果如下图所示,设置该表为表:test_province_city。

(2). 题目要求:

数据集A,按照省市区分别显示为3列,为省一级时,后面没有下一级,则后两列为空,为市一级,后面没有下一级,则后一列为空。

预期结果:

解题思路:

(1). 第1个union all的子查询,查询出省一级的信息

查询结果如下:

NAME_1???NAME_2??NAME_3 浙江??? 安徽?

(2). 第2个union all的子查询,查询出市二级的信息

查询结果如下:

NAME_1??NAME_2??NAME_3 浙江?????杭州? 浙江?????宁波? 安徽?????合肥? 安徽?????宣城?

(3). 第3个union all的子查询,查询出区三级的信息

查询结果如下:

NAME_1???NAME_2???NAME_3 浙江??????杭州??????滨江 浙江??????杭州??????富阳 浙江??????杭州??????萧山

(4). 最后按照省、市NAME进行正序排列

查询结果如预期结果所示

解题方式一:

适用于不用创建物理表的情况下

使用数据集A,B,C,D,E,F替代物理表:test_province_city,直接复制以下 Mysql 语句,可以在 Mysql 或 Hive sql 环境直接运行,得到以上预期结果数据。

select?NAME_1, ????NAME_2, ????NAME_3? ?from?(select?NAME?AS?NAME_1, ?????''?AS?NAME_2, ?????''?AS?NAME_3 ???from?(??select?1?ID,10000?CODE,'浙江'?NAME,0?PARENTCODE ?????union?all ?????select?2?ID,20000?CODE,'安徽'?NAME,0?PARENTCODE ?????union?all ?????select?3?ID,11000?CODE,'杭州'?NAME,10000?PARENTCODE ?????union?all ?????select?4?ID,12000?CODE,'宁波'?NAME,10000?PARENTCODE ?????union?all ?????select?5?ID,21000?CODE,'合肥'?NAME,20000?PARENTCODE ?????union?all ?????select?6?ID,22000?CODE,'宣城'?NAME,20000?PARENTCODE ?????union?all ?????select?7?ID,11100?CODE,'萧山'?NAME,11000?PARENTCODE ?????union?all ?????select?8?ID,11300?CODE,'滨江'?NAME,11000?PARENTCODE ?????union?all ?????select?9?ID,11300?CODE,'富阳'?NAME,11000?PARENTCODE ????)A?where?PARENTCODE=0 ????union?all ????select?B.NAME?AS?NAME_1, ????????C.NAME?AS?NAME_2, ????????''?AS?NAME_3 ?????from?(??select?1?ID,10000?CODE,'浙江'?NAME,0?PARENTCODE ???????union?all ???????select?2?ID,20000?CODE,'安徽'?NAME,0?PARENTCODE ???????union?all ???????select?3?ID,11000?CODE,'杭州'?NAME,10000?PARENTCODE ???????union?all ???????select?4?ID,12000?CODE,'宁波'?NAME,10000?PARENTCODE ???????union?all ???????select?5?ID,21000?CODE,'合肥'?NAME,20000?PARENTCODE ???????union?all ???????select?6?ID,22000?CODE,'宣城'?NAME,20000?PARENTCODE ???????union?all ???????select?7?ID,11100?CODE,'萧山'?NAME,11000?PARENTCODE ???????union?all ???????select?8?ID,11300?CODE,'滨江'?NAME,11000?PARENTCODE ???????union?all ???????select?9?ID,11300?CODE,'富阳'?NAME,11000?PARENTCODE ??????)B?join? ??????(???select?1?ID,10000?CODE,'浙江'?NAME,0?PARENTCODE ???????union?all ???????select?2?ID,20000?CODE,'安徽'?NAME,0?PARENTCODE ???????union?all ???????select?3?ID,11000?CODE,'杭州'?NAME,10000?PARENTCODE ???????union?all ???????select?4?ID,12000?CODE,'宁波'?NAME,10000?PARENTCODE ???????union?all ???????select?5?ID,21000?CODE,'合肥'?NAME,20000?PARENTCODE ???????union?all ???????select?6?ID,22000?CODE,'宣城'?NAME,20000?PARENTCODE ???????union?all ???????select?7?ID,11100?CODE,'萧山'?NAME,11000?PARENTCODE ???????union?all ???????select?8?ID,11300?CODE,'滨江'?NAME,11000?PARENTCODE ???????union?all ???????select?9?ID,11300?CODE,'富阳'?NAME,11000?PARENTCODE ??????)C?on?B.CODE?=?C.PARENTCODE?and?B.PARENTCODE=0 ????union?all ????select?D.NAME?AS?NAME_1, ????????E.NAME?AS?NAME_2,? ????????F.NAME?AS?NAME_3 ?????from?(??select?1?ID,10000?CODE,'浙江'?NAME,0?PARENTCODE ???????union?all ???????select?2?ID,20000?CODE,'安徽'?NAME,0?PARENTCODE ???????union?all ???????select?3?ID,11000?CODE,'杭州'?NAME,10000?PARENTCODE ???????union?all ???????select?4?ID,12000?CODE,'宁波'?NAME,10000?PARENTCODE ???????union?all ???????select?5?ID,21000?CODE,'合肥'?NAME,20000?PARENTCODE ???????union?all ???????select?6?ID,22000?CODE,'宣城'?NAME,20000?PARENTCODE ???????union?all ???????select?7?ID,11100?CODE,'萧山'?NAME,11000?PARENTCODE ???????union?all ???????select?8?ID,11300?CODE,'滨江'?NAME,11000?PARENTCODE ???????union?all ???????select?9?ID,11300?CODE,'富阳'?NAME,11000?PARENTCODE ??????)D?JOIN? ??????(???select?1?ID,10000?CODE,'浙江'?NAME,0?PARENTCODE ???????union?all ???????select?2?ID,20000?CODE,'安徽'?NAME,0?PARENTCODE ???????union?all ???????select?3?ID,11000?CODE,'杭州'?NAME,10000?PARENTCODE ???????union?all ???????select?4?ID,12000?CODE,'宁波'?NAME,10000?PARENTCODE ???????union?all ???????select?5?ID,21000?CODE,'合肥'?NAME,20000?PARENTCODE ???????union?all ???????select?6?ID,22000?CODE,'宣城'?NAME,20000?PARENTCODE ???????union?all ???????select?7?ID,11100?CODE,'萧山'?NAME,11000?PARENTCODE ???????union?all ???????select?8?ID,11300?CODE,'滨江'?NAME,11000?PARENTCODE ???????union?all ???????select?9?ID,11300?CODE,'富阳'?NAME,11000?PARENTCODE ??????)E?ON?D.CODE=E.PARENTCODE?AND?D.PARENTCODE=0 ??????JOIN?(??select?1?ID,10000?CODE,'浙江'?NAME,0?PARENTCODE ????????union?all ????????select?2?ID,20000?CODE,'安徽'?NAME,0?PARENTCODE ????????union?all ????????select?3?ID,11000?CODE,'杭州'?NAME,10000?PARENTCODE ????????union?all ????????select?4?ID,12000?CODE,'宁波'?NAME,10000?PARENTCODE ????????union?all ????????select?5?ID,21000?CODE,'合肥'?NAME,20000?PARENTCODE ????????union?all ????????select?6?ID,22000?CODE,'宣城'?NAME,20000?PARENTCODE ????????union?all ????????select?7?ID,11100?CODE,'萧山'?NAME,11000?PARENTCODE ????????union?all ????????select?8?ID,11300?CODE,'滨江'?NAME,11000?PARENTCODE ????????union?all ????????select?9?ID,11300?CODE,'富阳'?NAME,11000?PARENTCODE ???????)F?ON?E.CODE=F.PARENTCODE ????)G?ORDER?BY?NAME_1,NAME_2;

解题方式二:

适用于先创建物理表:test_province_city 的情况下

将测试数据 insert 至 test_province_city 表。

表数据结果如下:

将解题方式一中的数据集A,B,C,D,E,F替换成表 test_province_city即可。

select?NAME_1, ???????NAME_2, ???????NAME_3? ?from?(select?NAME?AS?NAME_1, ????????????????''?AS?NAME_2, ????????????????''?AS?NAME_3 ???from?test_province_city?A?where?PARENTCODE=0 ????union?all ????select?B.NAME?AS?NAME_1, ????????C.NAME?AS?NAME_2, ????????''?AS?NAME_3 ?????from?test_province_city?B?join? ??????test_province_city?C?on?B.CODE?=?C.PARENTCODE?and?B.PARENTCODE=0 ????union?all ????select?D.NAME?AS?NAME_1, ????????E.NAME?AS?NAME_2,? ????????F.NAME?AS?NAME_3 ?????from?test_province_city?D?JOIN? ??????test_province_city?E?ON?D.CODE=E.PARENTCODE?AND?D.PARENTCODE=0 ??????JOIN?test_province_city?F?ON?E.CODE=F.PARENTCODE ????)G?ORDER?BY?NAME_1,NAME_2;

解题思想归纳:

1.第1个子查询,查询出省一级的信息,查询结果如下:

NAME_1???NAME_2??NAME_3 浙江??? 安徽?

2.第2个子查询,查询出市二级的信息,查询结果如下:

NAME_1??NAME_2??NAME_3 浙江????杭州? 浙江????宁波? 安徽????合肥? 安徽????宣城?

3.第3个子查询,查询出区三级的信息,查询结果如下:

NAME_1???NAME_2???NAME_3 浙江??????杭州?????滨江 浙江??????杭州?????富阳 浙江??????杭州?????萧山

最后将这3部分的查询结果进行union all,然后按照省、市的NAME进行正序排列,最终得到如期的预期结果。

欢迎关注【无量测试之道】公众号,回复【领取资源】

Python+Unittest框架API自动化、

Python+Unittest框架API自动化、

Python+Pytest框架API自动化、

Python+Pandas+Pyecharts大数据分析、

Python+Selenium框架Web的UI自动化、

Python+Appium框架APP的UI自动化、

Python编程学习资源干货、

Vue前端组件化框架开发、

资源和代码 免费送啦~ 文章下方有公众号二维码,可直接微信扫一扫关注即可。

备注:我的个人公众号已正式开通,致力于IT互联网技术的分享。

包含:数据分析、大数据、机器学习、测试开发、API接口自动化、测试运维、UI自动化、性能测试、代码检测、编程技术等。

微信搜索公众号:“无量测试之道”,或扫描下方二维码:

??

添加关注,让我们一起共同成长!


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #这道 #MySQL #的解题思想 #值得学习 #题目1 #2