PostgreSQL:查询 JSON 数组中的元素
PostgreSQL: Query elements in a JSON array
我有一个数据库 table 如下所示:
---------------------------------------
| id | json_array (jsonb) |
---------------------------------------
| 1 | [{"a": 1}, {"a": 5}, {"a": 1}] |
| 2 | [{"a": 2}] |
| 3 | [{"a": 1}] |
---------------------------------------
我想使用 PostgreSQL 的 JSON 查询能力来 select json_array
数组中的某些子词典,例如"a": 1
.
的字典
输出应该是
------------------
| id | json_dict |
------------------
| 1 | {"a": 1} |
| 1 | {"a": 1} |
| 3 | {"a": 1} |
------------------
以下查询适用于每个数组中的第一个元素,但我想检查所有元素:
SELECT id, json_array -> 0
FROM my_table
WHERE json_array -> 0 -> "a" = 1;
假设这是一个 JSONB 列,您可以对 json 对象使用 @>
运算符:
select *
from my_table
where json_array @> '[{"a": 1}]';
在线示例:https://rextester.com/SACUDU51598
如果您希望所有对象都作为行,则需要取消嵌套数组:
select t.id, e.obj
from data t
cross join jsonb_array_elements(json_array) as e(obj)
where e.obj = '{"a": 1}'
您可以使用 jsonb_array_elements()
将数组元素扩展为每行一个元素。这个可以过滤:
SELECT
id,
elems.value
FROM
mytable,
jsonb_array_elements(data) elems
WHERE
elems.value = '{"a":1}'
我有一个数据库 table 如下所示:
---------------------------------------
| id | json_array (jsonb) |
---------------------------------------
| 1 | [{"a": 1}, {"a": 5}, {"a": 1}] |
| 2 | [{"a": 2}] |
| 3 | [{"a": 1}] |
---------------------------------------
我想使用 PostgreSQL 的 JSON 查询能力来 select json_array
数组中的某些子词典,例如"a": 1
.
输出应该是
------------------
| id | json_dict |
------------------
| 1 | {"a": 1} |
| 1 | {"a": 1} |
| 3 | {"a": 1} |
------------------
以下查询适用于每个数组中的第一个元素,但我想检查所有元素:
SELECT id, json_array -> 0
FROM my_table
WHERE json_array -> 0 -> "a" = 1;
假设这是一个 JSONB 列,您可以对 json 对象使用 @>
运算符:
select *
from my_table
where json_array @> '[{"a": 1}]';
在线示例:https://rextester.com/SACUDU51598
如果您希望所有对象都作为行,则需要取消嵌套数组:
select t.id, e.obj
from data t
cross join jsonb_array_elements(json_array) as e(obj)
where e.obj = '{"a": 1}'
您可以使用 jsonb_array_elements()
将数组元素扩展为每行一个元素。这个可以过滤:
SELECT
id,
elems.value
FROM
mytable,
jsonb_array_elements(data) elems
WHERE
elems.value = '{"a":1}'