我正在使用mysql数据库 部门的架构是
Department Table
Deptid DeptName
1 CEO
2 HR
3 IT
4 Dev
5 QA
Employee table
Empid EmpName managerid deptid
1 E1 1
2 E2 1 2
3 E3 1 3
4 E4 3 4
5 E5 4 4
6 E6 4 4
7 E7 3 5
8 E8 7 5
9 E9 7 5
我需要输出
deptid parentdept count
1 1
2 1 1
3 1 1
4 3 3
5 3 3
父母部门是属于员工经理的部门。 这意味着IT部门首席执行官是IT和人力资源部门的主管部门,因为IT和人力资源经理向CEO部门经理报告。 这意味着部门IT部门是Dev和QA的主管部门,因为DEV和QA经理向IT部门经理报告。
deptid parentdept count
CEO 1
HR CEO 1
IT CEO 1
DEV IT 3
QA IT 3
Tree representation of it is
CEO-(deptid 1)E1
HR-(deptid 2)E2 IT-(deptid 3)E3
DEV-(deptid 4)E4 QA(deptid 5)E7
E5-(deptid 4) E6-(deptid 4) E8-(deptid 5) E9-(deptid 5)
答案 0 :(得分:2)
我认为经理人不应该与你描述的同一部门行中的任何empid相等。
select A.deptid,B.parentdept,A.count from (select deptid,
count(*) as count from Employee group by deptid) as A
left join
(select t1.deptid, t3.deptid as parentdept from Employee t1,Employee t3 where t1.managerid not
in (select Empid from Employee t2 where t2.deptid=t1.deptid)
and t1.managerid=t3.empid) as B
on A.deptid=B.deptid;
如果我错过了逻辑中的某些内容,请提前道歉。