Postgresql 如何从jsonb数组postgres中提取?
我的一列包含以下数组。我只需要订单代码。我该怎么做 供应商提供的数据 {供应商数据:[{订单id:10000,发货id:20000,订单查找代码:fr\U 30000dd}]Postgresql 如何从jsonb数组postgres中提取?,postgresql,jsonb,Postgresql,Jsonb,我的一列包含以下数组。我只需要订单代码。我该怎么做 供应商提供的数据 {供应商数据:[{订单id:10000,发货id:20000,订单查找代码:fr\U 30000dd}] 我假设供应商提供的数据是您的jsonb列。 此查询将返回表装运的所有记录,并选择订单\查找\代码 选择jsonb_数组_元素供应商提供的_数据->供应商数据->订单查找代码 从…起 运输 哪里 1=1如果需要多个列,则每列需要一个表达式,例如 select vendor_provided_data #>> '{
我假设供应商提供的数据是您的jsonb列。 此查询将返回表装运的所有记录,并选择订单\查找\代码 选择jsonb_数组_元素供应商提供的_数据->供应商数据->订单查找代码 从…起 运输 哪里
1=1如果需要多个列,则每列需要一个表达式,例如
select vendor_provided_data #>> '{vendor_data, 0, order_lookup_code}' as code_1,
vendor_provided_data #>> '{vendor_data, 1, order_lookup_code}' as code_2,
vendor_provided_data #>> '{vendor_data, 2, order_lookup_code}' as code_3,
...
from the_table
>>操作符从JSON值中提取一个嵌套元素,沿着一条路径,数组的每个元素在该路径中指定一个步骤。使用多个->操作符也可以实现同样的效果。{vendor_data,0,'order_lookup_code'}等同于->'vendor_data'->0->'order_lookup_code'
如果多行都可以,那么可以使用jsonb_数组_元素
如果数组包含多个元素,是否要在结果中包含多行?否。最好只在其旁边的另一列中显示元素的顺序。\u lookup\u code是否有元素数的上限?SQL查询中不能有动态列。因此,您需要使用预定义的列数编写查询选择供应商提供的数据>>“{vendor\u data,0,order\u lookup\u code}”作为代码,这是有效的!我只需要在订单查找代码中使用双引号。Postgres给了我一个语法错误。非常感谢。
select t.id, --<< whatever columns you want from the table
vd.item ->> 'order_lookup_code' as lookup_code
from the_table t
cross join jsonb_array_elements(t.vendor_provided_data -> 'vendor_data') as vd(item)
select jsonb_path_query_array(vendor_provided_data, '$.vendor_data[*].order_lookup_code') as all_codes
from the_table