无法从列表内的字典中选择数据

时间:2019-02-08 17:07:19

标签: postgresql jsonb postgresql-9.5

我在下表中有两个jsonb字段,我想在查询中过滤字典的任何键。

Table with data

我的问题是那些字典在列表中,并且当我尝试使用以下方法访问它们时:

SELECT *
FROM public.monitoring_environmentalcontrol
WHERE celery_status->'queue'='0'

我什么也没得到:

Result table

1 个答案:

答案 0 :(得分:0)

您可以使用jsonb_array_elements DOC函数来实现自己的目标,并在上面加上LATERAL JOIN 7.2.1.5. LATERAL Subqueries

这是我创建的设置:

create table test (
  id int, 
  celery_status jsonb
);

insert into test values 
(1,'[{"queue":"a"}, {"queue":"b"}, {"queue":"c"}]'),
(2,'[{"queue":"d"}, {"queue":"e"}, {"queue":"f"}]'),
(3,'[{"queue":"g"}, {"queue":"h"}, {"queue":"i"}]');

这是查询:

select t.id, t.celery_status, obj->>'queue'
from test t
     join lateral
     jsonb_array_elements(t.celery_status) obj(value) on obj->>'queue' = 'a'

您可以在这里看到它的工作:http://sqlfiddle.com/#!17/bf7bf/6