Как выбрать данные из столбца jsonb?
У меня есть один столбец с типом jsonb. Данные в этом столбце выглядят следующим образом
{
"random_number1":
{
"random_number2":
{
"Param1": 2,
"Param2": 0,
"Param3": 0,
"Param4": 6,
"Param5": 3
}
}
}
Как написать select для этого столбца, если я хочу, т. е. все строки, где "Param3" =6 ? Я попробовал что-то вроде этого
SELECT * FROM table WHERE column->'Param3' @> '6'::jsonb;
1 ответ:
Это зависит от ваших ожиданий.
Получаем значение заданного пути:
select * from my_table where my_col->'random_number1'->'random_number2'->>'Param3' = '6'
Получаем значение ключа
Param3
любого объекта на третьем уровне:select t.* from my_table t, jsonb_each(my_col) as level1(key1, value1), jsonb_each(value1) as level2(key2, value2) where jsonb_typeof(my_col) = 'object' and jsonb_typeof(value1) = 'object' and value2->>'Param3' = '6';
Во втором случае вы можете использовать
distinct
, поскольку запрос может выдавать дублированные строки.