Postgresql 使用Postgres将两个表中的数据作为数组输出
我在Postgres数据库中有两个表,如果可能的话,我需要一些帮助来将查询集合起来以特定格式输出数据 表1账户Postgresql 使用Postgres将两个表中的数据作为数组输出,postgresql,Postgresql,我在Postgres数据库中有两个表,如果可能的话,我需要一些帮助来将查询集合起来以特定格式输出数据 表1账户 RowID Name AccountNo 1 John 45356333 2 Helen 74562445 表2代码 RowID AccountNo Code Status 1 45356333 csdcwew Active 2 45356333
RowID Name AccountNo
1 John 45356333
2 Helen 74562445
表2代码
RowID AccountNo Code Status
1 45356333 csdcwew Active
2 45356333 gererge Active
2 74562445 thwfewf Active
我希望能够获得数据,以便最终获得一个JSON对象,如下所示:
{
"Accounts": [
{
"AccountNo": "45356333",
"Codes": [
{
"Code": "csdcwew",
"Status": "Active"
},
{
"Code": "gererge",
"Status": "Active"
}
]
},
{
"AccountNo": "74562445",
"Codes": [
{
"Code": "thwfewf",
"Status": "Active"
}
]
}
]
}
我尝试过一个查询,它使用array_agg函数输出所有帐户和一个代码数组,但这是我所能得到的。真的,我也需要状态和描述
SELECT a."Name",
array_agg(c."Codes")
FROM ("Accounts" a
LEFT JOIN "Codes" c ON ((c."AccountNo" = a."AccountNo")))
GROUP BY a."Name";
你很接近。您可以继续使用聚合状态值的方式,就像聚合代码的方式一样。然后,您将有两个列,可以按顺序进行迭代 另一种选择是Postgres有一个非常合理的JSON语法,允许您直接聚合到JSON
SELECT json_agg(json_build_object(
'AccountNo', accountNo,
'Codes', val ))
FROM (
select accountNo,
json_agg (json_build_object(
'code', code,
'status', status)) as val
from codes
group by accountNo) as c;
通过对表名的引号进行一些调整,这是可行的。如果我需要从Accounts表中获取更多数据,我没有透露那里还有其他字段我想包含在结果中,这真的是我的错。抱歉。从account表中获取更多细节应该不是问题。您可以执行与在c上的问题中相同的联接,然后在调用外部json_build_对象时包括它们。