Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres从jsonb数组中提取值_Postgresql_Postgresql 9.4_Jsonb - Fatal编程技术网

Postgresql Postgres从jsonb数组中提取值

Postgresql Postgres从jsonb数组中提取值,postgresql,postgresql-9.4,jsonb,Postgresql,Postgresql 9.4,Jsonb,我有一个jsonb字段,其数组如下所示: [ { "type":"discount", "title":"Discount 10%" }, { "file":"zx5rP8EoacyfhqGndcSOnP8VYtkr9Ya8Nvf7oYL98YDsM1CLMYIurYvfVUU4AGkzBsovwssT0bq.pdf", "type":"menu", "title":"Some menu tit

我有一个jsonb字段,其数组如下所示:

[  
   {  
      "type":"discount",
      "title":"Discount 10%"
   },
   {        
      "file":"zx5rP8EoacyfhqGndcSOnP8VYtkr9Ya8Nvf7oYL98YDsM1CLMYIurYvfVUU4AGkzBsovwssT0bq.pdf",
      "type":"menu",
      "title":"Some menu title etc"
   }
]
如果数组中有type=menu,我想获得文件属性

我设法做到的是知道是否有,但如何最终提取文件值

case when offers @> '[{"type":"menu"}]' then true else false end
我不想做下面这样的事情,因为数组可能不包含折扣类型

offers->1->'file'

使用
jsob\u array\u elements()
->
运算符(请参阅。)


使用
jsob\u array\u elements()
->
运算符(请参阅。)

例如:

例如:


试试
json\u array\u elements
。@VaoTsun不走运吗?试试
json\u array\u elements
。@VaoTsun不走运吗?为什么要使用横向而不是普通的jsonb\u数组\u元素?返回行集的函数应该在
FROM
子句中调用,横向连接是一种自然的方法。为什么要使用横向连接横向而不是普通的jsonb_数组_元素?返回行集的函数应该在
FROM
子句中调用,横向连接是一种自然的方法。
with a_table(json_col) as (
values (
'[  
   {  
      "type":"discount",
      "title":"Discount 10%"
   },
   {        
      "file":"zx5rP8EoacyfhqGndcSOnP8VYtkr9Ya8Nvf7oYL98YDsM1CLMYIurYvfVUU4AGkzBsovwssT0bq.pdf",
      "type":"menu",
      "title":"Some menu title etc"
   }
]'::jsonb)
)

select value->>'file' as filename
from a_table,
lateral jsonb_array_elements(json_col)
where value->>'type' = 'menu'

                                    filename                                     
---------------------------------------------------------------------------------
 zx5rP8EoacyfhqGndcSOnP8VYtkr9Ya8Nvf7oYL98YDsM1CLMYIurYvfVUU4AGkzBsovwssT0bq.pdf
(1 row)
t=# with a as (with v as (select '[
   {
      "type":"discount",
      "title":"Discount 10%"
   },
   {
      "file":"zx5rP8EoacyfhqGndcSOnP8VYtkr9Ya8Nvf7oYL98YDsM1CLMYIurYvfVUU4AGkzBsovwssT0bq.pdf",
      "type":"menu",
      "title":"Some menu title etc"
   }
]'::jsonb j)
select jsonb_array_elements(j) r from v) select r->>'file' from a where r->>'type' = 'menu';
                                    ?column?
---------------------------------------------------------------------------------
 zx5rP8EoacyfhqGndcSOnP8VYtkr9Ya8Nvf7oYL98YDsM1CLMYIurYvfVUU4AGkzBsovwssT0bq.pdf
(1 row)