我可以用一行结果(使用来自myprevious question的查询)创建一个层次结构,但是当它有多行时,我不知道从哪里开始。
这是我的桌子:

     id|  parent_id|                      name|
-------|-----------|--------------------------|
      1|     [NULL]|             United States|
      2|     [NULL]|                     Japan|
      3|          1|                  New York|
      4|          3|                  Brooklyn|
      5|          6|               Los Angeles|
      6|          1|                California|
      7|          6|                     Dixon|
      8|          2|                     Kyoto|
      9|          2|                     Tokyo|

name为空的parent_id是父级。那么,如何生成这样的查询结果呢?
                   Country|    States/Province|           City|
|-------------------------|-------------------|---------------|
|            United States|           New York|       Brooklyn|
|            United States|         California|    Los Angeles|
|            United States|         California|          Dixon|
|                    Japan|              Kyoto|         [NULL]|
|                    Japan|              Tokyo|         [NULL]|

最佳答案

在表上看起来像一个简单的自联接,因为您感兴趣的级别数量有限:

select co.name as country,
       p.name as "State/Province",
       ct.name as city
from hierarchy co
  left join hierarchy p on p.parent_id = co.id
  left join hierarchy ct on ct.parent_id = p.id
where co.parent_id is null
order by co.name;

在线示例:https://rextester.com/UON36358

关于sql - 是否可以创建层次结构,但在Postgres中具有多个行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58603515/

10-12 18:22