Arrays postgres中的jsonb查询
我在postgres中有一个名为:op_user_event_data的表,它有一个名为data的列,我在其中存储了一个jsonb,目前我有一个json,如下所示:Arrays postgres中的jsonb查询,arrays,postgresql,jsonb,Arrays,Postgresql,Jsonb,我在postgres中有一个名为:op_user_event_data的表,它有一个名为data的列,我在其中存储了一个jsonb,目前我有一个json,如下所示: { "aisles": [], "taskGroups": [ { "index": 0, "tasks": [ { "index": 1,
{
"aisles": [],
"taskGroups": [
{
"index": 0,
"tasks": [
{
"index": 1,
"mandatory": false,
"name": "Dados de Linear",
"structuresType": null,
"lines": [
{
"sku": {
"skuId": 1,
"skuName": "Limiano Bola",
"marketId": [
1,
3,
10,
17
],
"productId": 15,
"brandId": [
38,
44
]
},
"taskLineFields": [
{
"tcv": {
"value": "2126474"
},
"columnType": "skuLocalCode",
"columnId": 99
},
{
"tcv": {
"value": null
},
"columnType": "face",
"columnId": 29
},
]
},
{
"sku": {
"skuId": 3,
"skuName": "Limiano Bolinha",
"marketId": [
1,
3,
10,
17
],
"productId": 15,
"brandId": [
38,
44
]
},
"taskLineFields": [
{
"tcv": {
"value": "2545842"
},
"columnType": "skuLocalCode",
"columnId": 99
},
{
"tcv": {
"value": null
},
"columnType": "face",
"columnId": 29
},
]
},
{
"sku": {
"skuId": 5,
"skuName": "Limiano Bola 1/2",
"marketId": [
1,
3,
10,
17
],
"productId": 15,
"brandId": [
38,
44
]
},
"taskLineFields": [
{
"tcv": {
"value": "5127450"
},
"columnType": "skuLocalCode",
"columnId": 99
},
{
"tcv": {
"value": "5.89"
},
"columnType": "rsp",
"columnId": 33
}
]
}
基本上我有一个物体
走道[],
工作组,
身份证和姓名
在json中显示的任务组中,其中一个属性是任务,它是一个数组,也有一个名为lines的数组,它有一个sku和任务行数组
基本上:
任务组->任务->行->sku或任务行字段
我尝试了不同的查询来获取sku,但当我尝试获取“行”以外的任何内容时,它只是作为空白,或者在其他一些尝试中“无法从标量调用元素”
有人能帮我解决这个问题吗?注意,这只是一个示例json
任何人都知道如何做到这一点:
我想要所有行,其中行->任务行字段->列类型='offer'
我所能做的就是这样,但在标量上抛出错误:
SELECT lines->'sku' Produto, lines->'taskLineFields'->'tcv'->>'value' ValorOferta
FROM sd_bel.op_user_event_data,
jsonb_array_elements(data->'taskGroups') taskgroups,
jsonb_array_elements(taskgroups->'tasks') tasks,
jsonb_array_elements(tasks->'columns') columns,
jsonb_array_elements(tasks->'lines') lines
WHERE created_by = 'belteste'
AND lines->'taskLineFields'->>'columnType' = 'offer'
假设您的数据在
表中的某个json\u列中
with t as (
select json_column as xyz from table
),
tg as ( select json_array_elements(xyz->'taskGroups') taskgroups from t),
tsk as (select json_array_elements(taskgroups->'tasks') tasks from tg)
select json_array_elements(tasks->'lines') -> 'sku' as sku from tsk;
:/不幸的是,这会抛出两列记录,全部为空。我真的想得到tasklinefield->columntype=(让我们说'offer'或'quizz'或任何东西)@reasonzila您可以使用case语句来处理特殊情况……还有,用CTE
包装查询,并使用where-to-filter columntype。但是你给我的查询抛出了一堆null,我的意思是所有值都是null…:(@reasonzila)查看我的答案的更新。我使用CTE,并不断缩小到感兴趣的领域。