用于获取管理程序层次结构列表的SQL查询。员工 - >主管 - >监

时间:2018-04-22 03:09:04

标签: sql postgresql hierarchical-data recursive-query

enter image description here

我有两个表Employee和Department这个图像显示了每个员工的经理。我想写一个SQL查询,它给我一个所有主管的列表(经理,经理经理......)。

我只想要一个列,在给定特定员工时显示主管列表。

E.g。如果我给员工id = 202,那么我应该收到200,130

 |supervisor |   
 +-----------+
 |   200     |      
 |   130     | 

我有这个查询

WITH emp_dept as(
SELECT employee_id,manager_id 
FROM employee,department
WHERE employee.dept_id= department.dept_id
   ) 

 WITH recursive p as (
    select e1.employee_id, e1.manager_id
    from   emp_dept e1
    where    employee_id = 202

    union all

   select e2.employee_id , e2.manager_id
   from   p
   join   emp_dept e2 ON e2.employee_id = p.manager_id

)
select manager_id
from   p

`

我无法使用它。我正在使用pgadmin4。

如果有人可以帮我解决这个问题,我会非常感激

2 个答案:

答案 0 :(得分:0)

我认为你可以对Oracle使用“分层查询”并试试这个:

select manager_id supervisor 
from employee
start with employee_id = 202
connect by nocycle employee_id = prior manager_id;

答案 1 :(得分:0)

这是我的问题的解决方案

  with recursive p as (
WITH emp_dept as(
SELECT employee_id,manager_id 
FROM employee,department
WHERE employee.dept_id= department.dept_id
) 

select e1.employee_id, e1.manager_id
from   emp_dept e1
where  e1.employee_id = 202

union 

select e2.employee_id , e2.manager_id
from   p
join   emp_dept e2 ON e2.employee_id = p.manager_id

)
select manager_id
  from   p