我的SQL函数:

with recursive locpais as (
    select l.id, l.nome, l.tipo tid, lp.pai
    from loc l
    left join locpai lp on lp.loc = l.id
    where l.id = 12554
    union
    select l.id, l.nome, l.tipo tid, lp.pai
    from loc l
    left join locpai lp on lp.loc = l.id
    join locpais p on (l.id = p.pai)
)
select * from locpais

给我
12554 |     PARNA Pico da Neblina | 9 | 1564
12554 |     PARNA Pico da Neblina | 9 | 1547
 1547 |  São Gabriel da Cachoeira | 8 | 1400
 1564 | Santa Isabel do Rio Negro | 8 | 1400
 1400 |                 RIO NEGRO | 7 |  908
  908 |          NORTE AMAZONENSE | 6 |  234
  234 |                  Amazonas | 5 |  229
  229 |                     Norte | 4 |   30
   30 |                    Brasil | 3 |

这是一种等级制度。”帕纳代表“国家公园”,这两个城市涵盖了两个城市:圣·Gabriel da Cachoeira和圣塔·伊莎贝尔·里奥内格罗。所以它出现了两次。
如果我把最后一行改成
select string_agg(nome,', ') from locpais

我明白了
“帕娜·皮达·内布利纳,帕娜·皮达·内布利纳,Gabriel da
卡乔埃拉,圣伊莎贝尔多里奥内格罗,里奥内格罗,北欧亚马逊,
亚马孙、北卡罗来纳、巴西”
这几乎是好的,除了双重的“帕娜皮达达内布利娜”。所以我试着:
select string_agg(distinct nome, ', ') from locpais

但现在我明白了
“亚马孙,Brasil,北欧,亚马孙,帕纳娜.皮埃达.内布利纳,里约
尼格罗,圣伊莎贝尔·多里奥·尼格罗,圣加布里埃尔·达卡乔埃拉”
这是不正常的。我正试图在order by中添加一个string_agg,但无法使其工作。给出了表格的定义here

最佳答案

select string_agg(nome,', ')
from (
    select distinct nome
    from locpais
    order by tid desc
) s

09-27 14:55