gpt4 book ai didi

sql - 使用 postgresql 将多个连接的结果合并到单行中

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

我正在尝试使用连接查询来构建单行结果,将连接表中的行包装到一个 json 数组中。

这是一个示例方案;

CREATE TABLE main(id int);
INSERT INTO main values(1);

create TABLE sub1(id int, main_id int, lang int);
insert into sub1 values (1, 1, 1);
insert into sub1 values (1, 1, 2);

create TABLE sub2(id int, main_id int, lang int);
insert into sub2 values(1, 1, 1);

我的查询:

select main.id, 
array_to_json(array_agg(sub1.lang)) as sub1,
array_to_json(array_agg(sub2.lang)) as sub2
from main
inner join sub1 on main.id = sub1.main_id
inner join sub2 on main.id = sub2.main_id
where main.id = 1
group by main.id

此时,返回;

| id | sub1  | sub2  | 
|----|-------|-------|
| 1 | [1,2] | [1,1] |

我希望结果看起来像这样; (这只是从表中取出 lang)

| id | sub1  | sub2 | 
|----|-------|------|
| 1 | [1,2] | [1] |

我这里有一个 sql fiddle :

http://sqlfiddle.com/#!17/60c3f/2

我研究过使用 UNION 查询,但它返回了多行和重复数据。我希望我能够以与我在上面尝试过的类似的方式来做到这一点,但我不确定如何/是否可能?

最佳答案

您可以在 array_agg 中使用 distinct 关键字来删除重复项:

array_to_json(array_agg(distinct sub2.lang))

正如@a_horse_with_no_name 所建议的那样,它可以简化为:

json_agg(distinct sub1.lang)

关于sql - 使用 postgresql 将多个连接的结果合并到单行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48500342/

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