使用postgresql将多个联接的结果合并到一行中
我尝试使用连接查询构造一行结果,将连接表中的行包装到json数组中 下面是一个示例方案使用postgresql将多个联接的结果合并到一行中,sql,postgresql,Sql,Postgresql,我尝试使用连接查询构造一行结果,将连接表中的行包装到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, mai
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] |
我希望结果是这样的;(这只是从桌子上拿下朗格)
我这里有一个sql小提琴:
我曾研究过使用联合查询,但它返回了多行和重复数据。我希望我能够以类似于我在上面尝试过的方式来完成这项工作,但我不确定如何/是否可能?您可以使用数组内的
distinct
关键字来删除重复项:
array_to_json(array_agg(distinct sub2.lang))
正如@a_horse_和_no_名称所示,它可以简化为:
json_agg(distinct sub1.lang)
你看起来像这样吗:
array\u agg(distinct sub2.lang)
?@Albert啊是的,我想你是对的!(我是SQL新手,所以我可能会错过一些如此简单的东西!)。谢谢(如果你想提交答案,我可以标记为正确)不相关,但是:array\u to_json(array\u agg(sub1.lang))
可以简化为json\u agg(sub1.lang)
@a_horse\u,没有名字啊好的-谢谢你的提示!
json_agg(distinct sub1.lang)