Запрос нескольких столбцов Jsonb в postgresql - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь запросить несколько столбцов jsonb в postgresb. Я могу только выяснить, как запросить один указанный столбец c jsonb в столбце sql. Эти столбцы имеют одинаковую вложенную структуру. Вот пример структуры. Эта структура находится в двух разных столбцах jsonb.

{
    "6": {
        "start_date": "2008-01-02",
        "end_date": "2008-01-03",
        "name": "Berry",
        "order_number": 6,
    },
    "0": {
        "start_date": "2008-05-05",
        "end_date": "2008-05-06",
        "name": "John",
        "order_number": 0,
    }
}

Я могу успешно выполнить запрос в одном столбце jsonb, используя функцию jsonb_each.

Пример:

select (value->>'start_date')::timestamp as start_time, (value->>'end_date')::timestamp as end_time, value->>'name' as user, value->>'order_number' as order_num
from table, jsonb_each("jsonb_column_1")
where value->>'name' like '%Ber%';

Я хочу запросить «имена» из нескольких столбцов. Может быть, что-то вроде этого:

 select c1.(value->>'start_date')::timestamp as start_time_1, c2.(value->>'start_date')::timestamp as start_time_2, c1.(value->>'name' as user1), c2(value->>'name' as user2)
 from table, jsonb_each("jsonb_column_1")c1, jsonb_each("jsonb_column_2")c2
 where value->>'name' like '%Ber%';

1 Ответ

1 голос
/ 16 апреля 2020

Объедините их с СОЮЗОМ ВСЕ.

select (value->>'start_date')::timestamp as start_time, (value->>'end_date')::timestamp as end_time, value->>'name' as user, value->>'order_number' as order_num
from table1, jsonb_each("jsonb_column_1")
where value->>'name' like '%Ber%'
UNION ALL
select (value->>'start_date')::timestamp as start_time, (value->>'end_date')::timestamp as end_time, value->>'name' as user, value->>'order_number' as order_num
from table1, jsonb_each("jsonb_column_2")
where value->>'name' like '%Ber%'
...