sql - 如何在 sql 层次结构上显示祖 parent ?

标签 sql postgresql hierarchical-query

这是我的 table :

id     |parent_id  |name
-------|-----------|--------------------
      1|          0|Kevin Gravey
      2|          0|John Chen     
      3|          1|Clark Garvey  
      4|          2|Halsey Chen
      5|          3|Carl Garvey
      6|          4|Betty Chen  
      7|          5|Rick Garvey
      8|          6|Donna Chen       
     10|          5|Chris Garvey
     11|          6|Harrington Chen

但我需要让表格看起来像这样:

id     |parent_id  |name
-------|-----------|--------------------
      1|          0|Kevin Gravey
      2|          0|John Chen     
      3|          0|Kevin Gravey
      4|          0|John Chen
      5|          0|Kevin Gravey
      6|          0|John Chen  
      7|          0|Kevin Gravey
      8|          0|John Chen       
     10|          0|Kevin Gravey
     11|          0|John Chen

我使用了来自 this 的查询但是我得到了:

  id       |parent_id  |name
    -------|-----------|--------------------
          1|          0|
          2|          0|    
          3|          1|Kevin Gravey  
          4|          2|John Chen
          5|          3|Clark Garvey
          6|          4|Halsey Chen
          7|          5|Carl Garvey
          8|          6|Betty Chen
         10|          5|Rick Garvey
         11|          6|Donna Chen

有人知道查询是什么吗?我正在使用 postgre。

最佳答案

你走对了路。考虑使用这个:

with recursive tree as (
  select id, 
         parent_id, 
         array[id] as all_parents,
         name as parent_name
  from hierarchy
  where parent_id = 0
  union all 
  select c.id, 
         p.parent_id,
         p.all_parents,
         p.parent_name 
  from hierarchy c
     join tree p
      on c.parent_id = p.id 
     and c.id <> all (p.all_parents) 
)
select id, parent_id, parent_name
  from tree;

Demo

关于sql - 如何在 sql 层次结构上显示祖 parent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58585673/

相关文章:

php - 标记前 3 个条目

mysql - 在 SQL 中搜索后更新找到的行中的列值

sql - 如何使用 LINQ 生成 SQL?

python - Postgres psycopg2 创建用户

postgresql - 如何使用递归查询向后遍历分层树结构

mysql - 什么是相当于 Oracle 的 'start with...connect by' 的标准 SQL 查询,但不是特定于 DBMS 的

mysql - 如何一次打印多个查询,生成 1 个表?

java - MySQL 中的保留字转义 : Unknown column 'PASSWORD' in 'field list'

postgresql - 我如何在 postgres 中返回一点

sql - Oracle SQL 以/优先开始