【问题标题】:SQL query to get the list of supervisor hierarchy. employee --> supervisor --> supervisorSQL 查询以获取主管层次结构的列表。员工 --> 主管 --> 主管
【发布时间】:2018-07-13 15:20:37
【问题描述】:

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

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

例如如果我给员工 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。

如果有人能帮我解决这个问题,我将不胜感激

【问题讨论】:

  • 感谢您的帮助,但您提到的问题并不能帮助我获得主管名单。它只是处理总裁的主管是空白的,里面提到的查询只会给我所有员工和经理的列表(只有一个)。

标签: sql postgresql hierarchical-data recursive-query


【解决方案1】:

我认为您可以对 Oracle 使用“分层查询”并尝试以下操作:

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

【讨论】:

  • 我实际上使用的是 PostgresSQL pgadmin 4 数据库,这种语法无效。如果您可以帮助我使用 pgadmin 语法,那将非常有帮助。感谢您帮助我。
  • @paramtrivedi:您不应该接受无效的答案。如果您自己找到了解决方案,完全可以接受您自己的答案。
【解决方案2】:

这是我的问题的解决方案

  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

【讨论】:

    猜你喜欢
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多