Postgres遞歸函數可以實現多層遞歸。省-市-縣。
如果想按層次分別顯示出來,也可以這麼寫
test=# with RECURSIVE cte as ( select a.id,cast(a.name as varchar(100)) from tb a where id='002' union all select k.id,cast(c.name||'>'||k.name as varchar(100)) as name from tb k inner join cte c on c.id = k.pid )select id,name from cte ; id | name -----+---------------------- 002 | 浙江省 003 | 浙江省>衢州市 004 | 浙江省>杭州市 005 | 浙江省>湖州市 006 | 浙江省>嘉興市 007 | 浙江省>寧波市 008 | 浙江省>紹興市 009 | 浙江省>台州市 010 | 浙江省>溫州市 011 | 浙江省>麗水市 012 | 浙江省>金華市 013 | 浙江省>舟山市 014 | 浙江省>杭州市>上城區 015 | 浙江省>杭州市>下城區 016 | 浙江省>杭州市>拱墅區 017 | 浙江省>杭州市>餘杭區 018 | 浙江省>麗水市>金東區 (17 rows) |