我与此表有多对多关系
表资产:
| 身份证|姓名|其他领域|
| - ------|- ------|- ------|
| 十九|资产1|...|
| 二十个|资产2|...|
| ...|...|...|
分支表:
| 身份证|姓名|其他领域|
| - ------|- ------|- ------|
| 1个|分支1|...|
| 第二章|分支2|...|
| ...|...|...|
分支机构资产:
| 分支标识|资产标识|
| - ------|- ------|
| 1个|1个|
| 1个|第二章|
| 第二章|十四|
| 数量|数量|
我想返回一个json对象,格式如下:
{
'branches' : [
{
'branch_id': 1,
'branch_name': 'branch 1',
'branch_children': [
{
'asset_id': 1,
'asset_name': 'asset 1'
},
{
'asset_id': 2,
'asset_name': 'asset 2'
},
{
'asset_id': 99999,
'asset_name': 'asset 99999'
}
]
},
{
'branch_id': 2,
'branch_name': 'branch 2',
'branch_children': [
{
'asset_id': 1,
'asset_name': 'asset 1'
},
{
'asset_id': 2,
'asset_name': 'asset 2'
},
{
'asset_id': 99999,
'asset_name': 'asset 99999'
}
]
}
]
}
子元素可以是数组或对象,在这个例子中是模糊的。
使用此脚本:
select json_object(
'branch_id', branches.id,
'branch_name', branches.name,
'branch_children', json_arrayagg(json_object('asset_id', list.asset_id, 'asset_name', list.asset_name))
)
from branches
left join (
select b.id as branch_id, a.id as asset_id, a.name as asset_name
from branch_r_asset ba
join branches b
on b.id = ba.branch_id
join assets a
on a.id = ba.asset_id
group by b.id
) list on list.branch_id = branches.id
group by branches.id;
我得到了结果,但是在表中的每个branch_id都是按行分隔的,如下所示:
{"branch_name": "branch 1", "branch_id": "1", "branch_children": [{"asset_name": "asset 1", "asset_id": "1" }, {"asset_name": "asset 2", "asset_id": "2" }]}
{"branch_name": "branch 2", "branch_id": "2", "branch_children": [{"asset_name": "asset 15", "asset_id": "15" }, {"asset_name": "asset 244", "asset_id": "244" }, {"asset_name": "asset 7", "asset_id": "7" }]}
{"branch_name": "branch 3", "branch_id": "3", "branch_children": [{"asset_name": "asset 12", "asset_id": "12" }}]}
我不确定这是json管理问题(由我)还是一个组函数。
先谢了。
1条答案
按热度按时间eufgjt7s1#