如何从一个表中获取所有子团队,该表还包括团队的子团队?

时间:2020-05-05 11:28:03

标签: sql postgresql hierarchical-data

所以我有一个餐桌团队

team(id,name,parentId)。

我有如下表队:

id      name               parentId
 1      root                null
 2      child1              1
 3      child2              2

所以,我有teamId = 1 我可以在parentId的帮助下获得具有teamId 1的团队以及teamId 1的子团队。但是是否有可能获得child2,因为它的child1的子孩子是根的孩子,即teamId 1,仅包含teamId信息? 还是为了简化起见,是否需要像具有不同关系的Teams,Subteams和TeamSubteam那样以不同的方式创建表?

Team.find({
            where: {
                or: [{
                    id: teamId
                }, {
                    parentId: teamId
                }]
            },
            fields: ['id']
        }, function (err, teams) { });

1 个答案:

答案 0 :(得分:0)

这是一个简单的递归查询:

with recursive all_teams as ( 
  select *
  from team 
  where teamid = 1 -- or wherever you want to start
  union all
  select sub.*
  from team sub
   join all_teams p on p.id = sub.parentid
)
select *
from all_teams;