如何编写查询(可能是递归的)来获取Postgresql 8.4中的父子层次结构?

时间:2013-10-04 17:28:10

标签: postgresql recursion postgresql-8.4

我有一个父子层次结构,如图所示。顶部有一个总部作为母公司。其他节点是子分支。 可以有任意数量的区域区域,并且可以将任意数量的区域区域添加到区域区域。类似地,可以将任意数量的子分支添加到分区。在这里,在所有级别提供用户登录,并且我在向仅显示当前登录用户分支的子分支时遇到困难。我正在使用的数据库是'Postgresql8.4'。通过谷歌搜索我发现recursion可以完成。但坦率地说,我不理解大多数人所遵循的步骤。那么有人可以帮助我解决这个难题,并解释所遵循的步骤吗?

enter image description here

User Table
============
usr_id;     //Unique id of user
usr_branch_id;  //Id from the branch table


Branch Table
============
branch_id;  //Unique id of branch
branch_text_id;
branch_name;
branch_parent;

1 个答案:

答案 0 :(得分:1)

你会想要这样的东西:

 WITH RECURSIVE branch_tree AS (
         select branch_id, branch_text_id, branch_name, branch_parent, 
                branch_id::text as path
           from branch
          where branch_parent is null
      union all
         select b.branch_id, b.branc_text_id, b.branch_name, b.branch_parent, 
                t.path || ',' || b.branch_id::text 
           FROM branch b
           JOIN branch_tree t ON b.parent_id = t.branch_id
 )
 SELECT * FROM branch_tree ORDER BY string_to_array(path, ',')::int[];