1
쿼리에서 json 출력을 출력해야합니다.PostgreSQL json 및 배열 처리
입력 데이터 :
Documents:
==========
id | name | team
------------------
1 | doc1 | {"authors": [1, 2, 3], "editors": [3, 4, 5]}
Persons:
========
id | name |
--------------
1 | Person1 |
2 | Person2 |
3 | Person3 |
4 | Person4 |
5 | Person5 |
검색어 :
select d.id, d.name,
(select jsonb_build_object(composed)
from
(
select teamGrp.key,
(
select json_build_array(persAgg) from
(
select
(
select jsonb_agg(pers) from
(
select person.id, person.name
from
persons
where (persList.value)::int=person.id
) pers
)
from
json_array_elements_text(teamGrp.value::json) persList
) persAgg
)
from
jsonb_each_text(d.team) teamGrp
) teamed
) as teams
from
documents d;
와 나는 다음과 같은 출력 예상 :
ERROR :
{"id": 1, "name": "doc1", "teams":
{"authors": [{"id": 1, "name": "Person1"}, {"id": 2, "name": "Person2"}, {"id": 3, "name": "Person3"}],
"editors": [{"id": 3, "name": "Person3"}, {"id": 5, "name": "Person5"}, {"id": 5, "name": "Person5"}]}
그러나이 오류가 발생 이상 한 행이 표현식으로 사용되는 하위 쿼리
문제는 어디에서 수정해야합니까?
PostgreSQL은 9.5
감사합니다. 그러나 팀에서는 더 많은 객체가있을 수 있습니다. 작성자와 편집자뿐 아니라 다양한 객체가 있습니다. 나에게는 객체의 배열로서 키와 값을 결합하는 것이 복잡하다. – Tauras
@Tauras 답변을 업데이트 했으므로 다양한 팀을 처리 할 수 있습니다. 사실 그것은 쿼리를 약간 더 단순하게 만들었습니다. – redneb
감사합니다. 그것은 위대한 작품! – Tauras