Mysql函数:
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
gives me
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 |
这是一个地方的等级制度。 “PARNA”代表“国家公园”,该公园涵盖两个城市:São Gabriel da Cachoeira 和 Santa Isabel do Rio Negro。因此它出现了两次。
如果我将最后一行更改为
select string_agg(nome,', ') from locpais
I get
“帕纳皮科达内布利纳,帕纳皮科达内布利纳,圣加布里埃尔达
Cachoeira, Santa Isabel do Rio Negro, RIO NEGRO, NORTE AMAZONENSE,
亚马逊、北部、巴西”
除了双“PARNA Pico da Neblina”之外,这几乎没问题。所以我尝试:
select string_agg(distinct nome, ', ') from locpais
但现在我明白了
“亚马逊、巴西、北部、NORTE AMAZONENSE、帕纳皮科达内布利纳、里约热内卢
NEGRO、Santa Isabel do Rio Negro、São Gabriel da Cachoeira”
这是不正常的。我正在尝试添加一个order by
在 - 的里面string_agg
,但还无法使其发挥作用。给出了表的定义here https://stackoverflow.com/q/35702246/1086511.