使用postgresql将多个连接的结果合并为单行

时间:2018-01-29 11:36:11

标签: 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, 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] | 

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

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

我这里有一个小提琴:

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

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

1 个答案:

答案 0 :(得分:2)

您可以使用array_agg中的 <Switch> <Route path="/comp" component={component} /> <Redirect to="/error" /> </Switch> 关键字删除重复项:

distinct

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

array_to_json(array_agg(distinct sub2.lang))