我有一个jsonb类型的列。此列中的数据如下所示
{
"random_number1":
{
"random_number2":
{
"Param1": 2,
"Param2": 0,
"Param3": 0,
"Param4": 6,
"Param5": 3
}
}
}
如果我想要f.e.所有“Param3”=6的行,如何为该列编写select?
我试过那样的东西
SELECT * FROM table WHERE column->'Param3' @> '6'::jsonb;
最佳答案
这取决于你的期望。
获取指定路径的值:
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
,因为查询可能会产生重复的行。