求助大家:如何在mysql中将一个递归表(图1)转换成一个扁平化(图2)?sql运行的速度要快。

求助大家:如何在mysql中将一个递归表(图1)转换成一个扁平化(图2)?sql运行的速度要快。这个问题困扰了我很长时间了,希望得遇高人达成心愿。希望代码不要太复杂,略经修改便有一定的通用性。谢谢!

说明一下:

1、不能使用id截取的方法,因为实际数据的id编码是没有规律的。

2、以下这种办法查询效率很低,几乎没法用:

https://yq.aliyun.com/articles/48885


示例数据:

公司部门.sql



我在上面的数据中增加了一个部门(运营维护部),但尚无下级部门和人员,如何在SQL中也显示出来? 显示格式:

image.png

alu 发布于 2019-8-23 11:04 (编辑于 2019-8-26 16:27)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
wukaihuaLv5初级互助
发布于2019-8-23 13:49(编辑于 2019-8-28 15:59)

image.png

select a.部门名称 as 一级

,b.部门名称 as 二级

,case when c.部门名称 is null then '--' else c.部门名称 end as 三级

from 公司部门 a 

left join 公司部门 b on a.部门id=b.上级id

left join 公司部门 c on b.部门id=c.上级id

where a.上级ID is null


只有3级的话可以这么写

  • alu alu(提问者) 非常感谢!
    2019-08-23 18:00 
  • alu alu(提问者) 我在数据中增加了一个部门(运营维护部),但尚无下级部门和人员,如何在SQL中也显示出来? 显示格式: 一级 二级 三级 总部 运营维护部 -- 总部 人力资源部 部长
    2019-08-26 10:21 
  • wukaihua wukaihua 回复 alu(提问者) 你加二级部门进来会直接显示的呀,逻辑不能改
    2019-08-26 15:30 
  • alu alu(提问者) 回复 wukaihua 再麻烦看看我的数据(附件),非常感谢!
    2019-08-26 16:29 
  • wukaihua wukaihua 回复 alu(提问者) 答案改了,看一下
    2019-08-27 15:56 
  • 2关注人数
  • 778浏览人数
  • 最后回答于:2019-8-28 15:59
    请选择关闭问题的原因
    确定 取消
    返回顶部