postgresql联接表位于同一个表上,直到不再返回数据为止

postgresql联接表位于同一个表上,直到不再返回数据为止,postgresql,function,plpgsql,recursive-query,Postgresql,Function,Plpgsql,Recursive Query,我正在用pgsql编写一个函数。我有一个表a,表a的子列为。 使用这个查询,我可以得到一个孩子,但我需要所有的孩子,我不知道数据库中有多少孩子。 这只返回一行: SELECT * FROM A a INNER JOIN A a2 ON a2.id=a.child_of_a 这将返回两行: SELECT * FROM A a INNER JOIN A a2 ON a2.id=a.child_of_a INNER JOIN A a3 ON a3.id=a2.child_of_a 有没有

我正在用pgsql编写一个函数。我有一个表a,表a的子列为。 使用这个查询,我可以得到一个孩子,但我需要所有的孩子,我不知道数据库中有多少孩子。 这只返回一行:

SELECT * FROM A a 
INNER JOIN A a2 
ON a2.id=a.child_of_a
这将返回两行:

SELECT * FROM A a 
INNER JOIN A a2 
ON a2.id=a.child_of_a
INNER JOIN A a3 
ON a3.id=a2.child_of_a

有没有办法在不参加100次的情况下解决这个问题

您正在查找递归查询:

with tree as (
  select *
  from a 
  where id = ... --- this is your starting point

  union all 

  select c.*
  from a as c
    join tree as p on c.child_of_a = p.id
) 
select * 
from tree;
有关更多详细信息,请参阅手册: