表Product
在PostgreSQL 9.6中有一个jsonb列attributes
,并包含attributes
列的以下条目。
记录1:
[
{ "KEY1": "VALUE1", "KEY2": "VALUE2" },
{ "KEY1": "VALUE3", "KEY3": "VALUE4" },
]
记录2:
[
{ "KEY1": "VALUE1", "KEY2": "VALUE2" },
{ "KEY3": "VALUE3", "KEY4": "VALUE4" },
]
我们如何过滤包含KEY4
密钥的记录?
给出here的jsonb运算符不提供jsonb数组的详细信息。
答案 0 :(得分:1)
您必须替换正确的表名和列名,但这应该可以解决问题:
FROM your_table jsonb_array_elements(your_table.the_array_key->'your_column') AS something WHERE something->>'KEY4'::text != 'null'
在不知道表名和列名的情况下很难确定。最重要的是,您需要使用json_array_elements
。
答案 1 :(得分:1)
对于这样的表:
create table test_table
(
id serial not null,
data jsonb
);
使用您的数据
SELECT id, arr_elem
FROM test_table AS tt, jsonb_array_elements(
(
SELECT data
FROM test_table
WHERE id = tt.id
)
) AS arr_elem
WHERE arr_elem#>'{KEY4}' IS NOT NULL
您基本上解压缩数组并将其与源表连接回来。
结果:
id,arr_elem
2,{“KEY3”:“VALUE3”,“KEY4”:“VALUE4”}