如何检查JSONB列表中是否存在值

德斯蒙德

我正在尝试在PostgreSQL 11 JSONB查询中

SELECT id, my_json_field #>> '{field_depth_1, field_depth_2}' 
FROM my_data 
WHERE my_json_field @> '{"other_field": 3}'::jsonb

如果other_field是键值对,则效果很好,并且每行都有other_field = 3但是,如果other_field有一个值列表,例如:[2,3,6,8,10],并且我想为每一行找出值3是否存在于由表示的列表中other_field,我该如何编写查询?

克林

使用运算符@>根据文档:

@> jsonb左侧的JSON值是否在顶层包含正确的JSON路径/值条目?

例:

with my_data(id, my_json_field) as (
values
    (1, '{"field_depth_1": {"field_depth_2": "something 1"}, "other_field": 3}'::jsonb),
    (2, '{"field_depth_1": {"field_depth_2": "something 2"}, "other_field": 4}'),
    (3, '{"field_depth_1": {"field_depth_2": "something 3"}, "other_field": [2,3,6,8,10]}'),
    (4, '{"field_depth_1": {"field_depth_2": "something 4"}, "other_field": [2,4,6,8,10]}')
)

select id, my_json_field #>> '{field_depth_1, field_depth_2}' as value
from my_data 
where my_json_field->'other_field' @> '3'

 id |    value    
----+-------------
  1 | something 1
  3 | something 3
(2 rows)    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章