Определение порядка элементов внутри json_array - SQL - PullRequest
0 голосов
/ 10 мая 2018

У меня есть такая таблица, назовем ее base_table:

id |    date     |     json_array
---+-------------+------------------
1    2018-01-01    [{..a..},{..b..}]
2    2018-01-01    [{..c..}]
3    2018-01-01    [{..d..}]
4    2018-01-01    [{..e..},{..f..}]
.        .                 .
.        .                 .
.        .                 .

Столбец json_array всегда содержит 1 или 2 элемента.

Мне нужно сделать выбор в SQL, где в каждой строке я могу показать: соответствующий идентификатор из base_table; его порядок (если элемент входит в массив 1-го или 2-го); элемент json_array.

Вывод должен быть примерно таким:

id | order | json_object
---+-------+------------
1     1        {..a..}
1     2        {..b..}
2     1        {..c..}
3     1        {..d..}
4     1        {..e..}
4     2        {..f..}
.     .           .
.     .           .
.     .           .

Но у меня много проблем с , показывающим порядок элементов ... Кто-нибудь может помочь?

База данных находится в PostgreSQL 9.6.1

1 Ответ

0 голосов
/ 10 мая 2018

Использование json_array_elements(json_array) with ordinality:

with my_table(id, json_array) as (
values
    (1, '[{"a": 1}, {"b": 2}]'::json),
    (2, '[{"c": 3}]'),
    (3, '[{"d": 4}]'),
    (4, '[{"e": 5}, {"f": 6}]')
)

select id, ordinality, value
from my_table
cross join json_array_elements(json_array) with ordinality;

 id | ordinality |  value   
----+------------+----------
  1 |          1 | {"a": 1}
  1 |          2 | {"b": 2}
  2 |          1 | {"c": 3}
  3 |          1 | {"d": 4}
  4 |          1 | {"e": 5}
  4 |          2 | {"f": 6}
(6 rows)    

DbFiddle.

Читать 7.2.1.4. Табличные функции в документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...