员工之间的路径-数据库查询

时间:2019-04-11 11:43:43

标签: sql postgresql recursive-query

我正在尝试使用PostgreSQL递归查询查找两名员工之间的所有路径,以使员工彼此之间有5家公司。

我有一个包含两列的公司表:company_id和employee id 该表大约有35000行。问题是我的空间有限,因此,在某些情况下运行它时,我的递归查询给我一个空间错误(超出磁盘配额),并且我不知道如何优化解决方案以使其有效。请注意,同一员工可以在多个公司中找到。

首先,我根据company_id与其本身一起加入了company表,这样我在视图中就有两个employee_id列

之后,我编写了一个如下所示的递归查询:

with recursive path(employee1,employee2,ePath) as
( 
  select employee1,employee2,array[employee1||'']::integer[] as ePath, 1 as  depth
  from view 
  where employee1 = 111         
  union all 
  select v.employee1, v.employee2, p.ePath || v.employee1, p.depth + 1
  from view v, path p
  where v.employee1 = p.employee2 
  and p.depth < 5 
)
select ePath || employee2  
from path
where employee2 = 999

我希望输出的是像{111,………,999}这样的员工数组

0 个答案:

没有答案