我的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