Postgres - 使用递归 - 获取父名称列

时间:2012-05-23 18:56:44

标签: postgresql recursive-query self-reference

我有一张桌子:

CREATE TABLE cell
(
  cellpk serial NOT NULL,
  cellname character varying NOT NULL,  
  parent integer NOT NULL,
  CONSTRAINT cellpk PRIMARY KEY (cellpk)
)
cellA --> subcellA1 --> subsubcellA1
      |--> subcellA2 --> subsubcellA2   

我希望将单元格及其父级名称放在同一行。

像 -

subcellA1   -    cellA
subcellA2   -    cellA
subsubcellA1-    subcellA1
subsubcellA2-    subcellA2

我有一个查询,它给出父ID而不是cellname。如何获取父母的姓名而不是id。

WITH RECURSIVE cell_child as
(
SELECT fp.* FROM cell as fp WHERE fp.parent = '111'
 UNION ALL
 SELECT f.*
   FROM
     cell as f
 JOIN cell_child as fc
 ON (f.parent = fc.cellpk)     
 )     
 select * from cell_child as cc

1 个答案:

答案 0 :(得分:0)

尝试加入原始表:

WITH RECURSIVE cell_child AS (
  SELECT fp.* FROM cell as fp WHERE fp.parent = '111'
  UNION ALL
  SELECT f.* FROM cell AS f
    JOIN cell_child as fc ON f.parent = fc.cellpk
 )     
 SELECT cc.*, parent.cellname
   FROM cell_child AS cc
   LEFT JOIN cell AS parent ON parent.cellpk = cc.parent;
相关问题