坚持在json的子元素中添加名称
我有3个具有以下模式的表坚持在json的子元素中添加名称,json,postgresql,Json,Postgresql,我有3个具有以下模式的表 a.c1 int (pk), a.c2 varchar(50), a.c3 varchar(50), b.c1 int(pk), b.c2 int(fk) -> a.c1, b.c3 varchar(50), b.c4 varchar(50), c.c1 int(pk), c.c2 int(fk) -> b.c1, c.c3 int(fk) -> a.c1, c.c4 varchar(50), c.c5 varchar(50) 我希望结果是 {
a.c1 int (pk),
a.c2 varchar(50),
a.c3 varchar(50),
b.c1 int(pk),
b.c2 int(fk) -> a.c1,
b.c3 varchar(50),
b.c4 varchar(50),
c.c1 int(pk),
c.c2 int(fk) -> b.c1,
c.c3 int(fk) -> a.c1,
c.c4 varchar(50),
c.c5 varchar(50)
我希望结果是
{
"json_doc": {
"a.c1": "val",
"a.c2": "val",
"a.c3": "val",
"b": [{
"b_c1_value": {
"b.c1": "val",
"b.c2": "val",
"b.c3": "val",
"b.c4": "val",
"c": [{
"c_c1_value": {
"c.c1": "val",
"c.c2": "val",
"c.c3": "val",
"c.c4": "val",
"c.c5": "val"
}
}]
}
}]
}
}
有人能帮我使用正确的sql吗。我对博士后很陌生
我已经走了这么远:
select row_to_json(t)
from (
select
*,
(
select array_to_json(array_agg(row_to_json(d)))
from (
select
*,
(
select array_to_json(array_agg(row_to_json(dc)))
from (
select *
from c
where c.c2 = b.c1
) dc
) as c
from b
where c2 = a.c1
) d
) as b
from a
WHERE a.deployid = 19
) t;
我需要填充数组的键名。我受够了。非常感谢您的帮助 @jim Jones-谢谢你建议编辑。你对如何解决这个问题有什么想法吗?我的问题是一个有效的问题吗?有可能像我上面展示的那样使用json吗?请在rextester或db fiddle上构建它,以便其他人可以对其进行沙箱处理