MySQL关联查询。

需要关联查询出所需要的结果😭但是捯饬好久没搞明白,表信息和需要展现出的结果如图!注:部门表里部门编号等于5位的数据不要!有没有铁子知道应该怎样才能出现这种结果

img

select o.部门编码,o.部门编号,o.部门名称,
(select o1.部门编码 from org o1 where o1.部门id=o.父部门id) '父部门编码',
(select o1.部门名称 from org o1 where o1.部门id=o.父部门id) '父部门名称',
(select o2.部门编码 from org o2 where o2.父部门id=(selelct o3.部门id from org o3 where o3.部门名称='集团')) '最高级部门编码',
(select o2.部门名称 from org o2 where o2.父部门id=(selelct o3.部门id from org o3 where o3.部门名称='集团')) '最高级部门名称',
u.员工姓名 '负责人姓名'
from user u left join org o on u.员工编号=o.部门负责人员员工编号;

很简单得,创建一个新表,把两个表所需要得字段全部insert进去,最后加个where条件 length(部门编号)<>5

如果部门名称最大的级别就是 “集团”的话,一楼的就是正解。如果不是的话,就用其他的语言来查询吧

一楼正解

直接left join 关联字段是 父级id 就可以找到上级部门的信息。
最高级的话,需要使用递归找到最上层,就可以了。当然最好的方式是每个层级的记录,都有最高层级的id 这个设计是最合理的

最高级部门这块,需要递归判断,单条sql行不通,有两种方式,一种是写函数或是代码,在函数中循环向上查询至父部门id为集团的一层(也就是集团的下一级),代码的话,在查询得出基本信息后,在代码中将上述函数实现。另一种,做数据冗余,在org表中维护最高级部门的两个字段,但使用这种办法要注意,当部门有修改的需要同步维护这两字段,优点就是查询快速。