PostgreSQL JSONB 数组 - 查找键是否存在
PostgreSQL JSONB Array - Find if a key exists
table 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
键的记录?
给定的 jsonb 运算符 here 不提供 jsonb 数组的详细信息。
您必须替换正确的 table 和列名称,但这应该可以解决问题:
FROM your_table jsonb_array_elements(your_table.the_array_key->'your_column') AS something WHERE something->>'KEY4'::text != 'null'
如果不知道 table 和列名,很难确定。底线是您需要使用 json_array_elements
.
对于 table 这样的:
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
您基本上是解压数组并将其与源连接起来 table。
结果:
id , arr_elem
2 , {"KEY3": "VALUE3", "KEY4": "VALUE4"}
table 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
键的记录?
给定的 jsonb 运算符 here 不提供 jsonb 数组的详细信息。
您必须替换正确的 table 和列名称,但这应该可以解决问题:
FROM your_table jsonb_array_elements(your_table.the_array_key->'your_column') AS something WHERE something->>'KEY4'::text != 'null'
如果不知道 table 和列名,很难确定。底线是您需要使用 json_array_elements
.
对于 table 这样的:
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
您基本上是解压数组并将其与源连接起来 table。
结果:
id , arr_elem
2 , {"KEY3": "VALUE3", "KEY4": "VALUE4"}