在json \ jsonb字段上使用IN查询WHERE

时间:2015-12-09 20:24:31

标签: json postgresql jsonb

我在某些表格(产品)上有字段,例如“数据”。该字段包含例如下一个数据:

[{"text" : "Text one"}, {"text" : "Text two"}, {"text" : "Text three"}]

我需要能够找到产品,其中“data”字段上每个对象数组中的json对象包含“text”:“Text one”或“text”:“Text two”。一般来说,我需要做IN查询,但在json“data”字段里面 - >数组 - >对象

1 个答案:

答案 0 :(得分:1)

示例数据:

create table products(id int, data json);
insert into products values
(1, '[{"text" : "Text one"}, {"text" : "Text two"}, {"text" : "Text three"}]'),
(2, '[{"text" : "Text four"}, {"text" : "Text two"}, {"text" : "Text three"}]');

使用json_array_elements()

select distinct id, data::jsonb
from (
    select * 
    from products p, 
    json_array_elements(data)
    ) s
where value->>'text' in ('Text one', 'Text two')
order by id;

 id |                                 data                                  
----+-----------------------------------------------------------------------
  1 | [{"text": "Text one"}, {"text": "Text two"}, {"text": "Text three"}]
  2 | [{"text": "Text four"}, {"text": "Text two"}, {"text": "Text three"}]
(2 rows)

注意:data必须投放到jsonb才能在distinct中使用。