不能 select 列表中字典中的数据
can't select data from a dictionary inside a list
我在下面的 table 中有两个 jsonb 字段,我想做一个查询,在其中过滤字典的任何键。
我的问题是这些词典在列表中,当我尝试访问它们时:
SELECT *
FROM public.monitoring_environmentalcontrol
WHERE celery_status->'queue'='0'
我一无所获:
你可以在上面使用jsonb_array_elements
DOC function to achieve your goal plus a 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
我在下面的 table 中有两个 jsonb 字段,我想做一个查询,在其中过滤字典的任何键。
我的问题是这些词典在列表中,当我尝试访问它们时:
SELECT *
FROM public.monitoring_environmentalcontrol
WHERE celery_status->'queue'='0'
我一无所获:
你可以在上面使用jsonb_array_elements
DOC function to achieve your goal plus a 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