json - Select - Oracle JSON Object - Join
问题描述
I have a requirement to select column values in Oracle in a JSON structure. Let me explain the requirement in detail We have a table called "dept" that has the following rows
There is another table called "emp" that has the following rows
The output we need is as follows
{"Data": [{
"dept": "Sports",
"City": "LA",
"employees": {
"profile":[
{"name": "Ben John", "salary": "15000"},
{"name": "Carlos Moya", "salary": "19000"}]
}},
{"dept": "Sales",
"City": "Miami",
"employees": {
"profile":[
{"name": "George Taylor", "salary": "9000"},
{"name": "Emma Thompson", "salary": "8500"}]
}}
]
}
The SQL that I issued is as follows
select json_object('dept' value b.deptname,
'city' value b.deptcity,
'employees' value json_object('employee name' value a.empname,
'employee salary' value a.salary)
format json) as JSONRETURN
from emp a, dept b where
a.deptno=b.deptno
However, the result looks like the following and not what we expected.
Please note the parent data is repeated. What is the mistake I am making?
Thanks for the help
Bala
解决方案
你可以做这样的事情。json_object
请注意对和的多次(嵌套)调用json_arrayagg
。在 Oracle 12.2 中测试;其他版本可能有其他工具可以使工作更容易。
select json_object(
'Data' value
json_arrayagg(
json_object (
'dept' value deptname,
'City' value deptcity,
'employees' value
json_object(
'profile' value
json_arrayagg(
json_object(
'name' value empname,
'salary' value salary
) order by empid -- or as needed
)
)
) order by deptno -- or as needed
)
) as jsonreturn
from dept join emp using (deptno)
group by deptno, deptname, deptcity
;
推荐阅读
- amazon-web-services - 我可以将哪些变量类型添加到 s3 对象的元数据中?
- python - 添加迄今为止的军事时间返回错误:“int”对象不可切片
- security - 如何为 Kubernetes 设置全局用户 ID?
- laravel - Laravel 广播事件显示身份验证错误
- javascript - 如何在我想要的地方显示 div?
- java - 使用 Android 应用程序 (Java) 登录网站
- java - Java Stream 的工作速度比 for 循环慢
- c - 具有参数数量和默认参数的宏
- c++ - 将非类型与可变参数模板中的每种类型配对
- android - 在android'列'_data'中获取文件路径时出错'不存在'