我正在尝试使用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}这样的员工数组