gpt4 book ai didi

sql - 在 sql join 中合并部分重复的行

转载 作者:行者123 更新时间:2023-11-29 14:19:14 25 4
gpt4 key购买 nike

我在 PostgreSQL 数据库中有一些位置表:

Table loc -- the places themselves
---------
| id | name
| 1 | Park X
| 2 | City A
| 3 | City B

Table locdad -- the hierarchical relationship between places
------------
| id | dad | loc
| 1 | 2 | 1
| 1 | 3 | 1

这描述了一个覆盖城市 A 和城市 B 的国家公园“X”,即公园在等级制度中有两个“父亲”。

当我进行联合查询时,我得到了这个公园的两条线:

select l.id,l.name loc,l1.name dad
from loc l
join locdad ld on ld.loc = l.id
join loc l1 on l1.id = ld.dad
where l.id=1

| id | loc | dad
| 1 | Park X | City A
| 1 | Park X | City B

我想将结果合并为:

| id |   loc  |      dad
| 1 | Park X | City A, City B

我该怎么做?

最佳答案

尝试像这样使用 array_agg 函数:

select l.id,l.name loc,array_agg(l1.name) dad
from loc l
join locdad ld on ld.loc = l.id
join loc l1 on l1.id = ld.dad
where l.id=1
GROUP BY l.id,l.name

这取决于您的 postgres 版本,但要获取由逗号分隔的字符串 - 对于 9.0+ 使用:

select l.id,l.name loc,string_agg(l1.name, ', ') dad
from loc l
join locdad ld on ld.loc = l.id
join loc l1 on l1.id = ld.dad
where l.id=1
GROUP BY l.id,l.name

或者这个用于 8.4

select l.id,l.name loc,array_to_string(array_agg(l1.name), ', ') dad
from loc l
join locdad ld on ld.loc = l.id
join loc l1 on l1.id = ld.dad
where l.id=1
GROUP BY l.id,l.name

关于sql - 在 sql join 中合并部分重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35702246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com