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
Arrays postgres中的jsonb查询_Arrays_Postgresql_Jsonb - Fatal编程技术网

Arrays postgres中的jsonb查询

Arrays postgres中的jsonb查询,arrays,postgresql,jsonb,Arrays,Postgresql,Jsonb,我在postgres中有一个名为:op_user_event_data的表,它有一个名为data的列,我在其中存储了一个jsonb,目前我有一个json,如下所示: { "aisles": [], "taskGroups": [ { "index": 0, "tasks": [ { "index": 1,

我在postgres中有一个名为:op_user_event_data的表,它有一个名为data的列,我在其中存储了一个jsonb,目前我有一个json,如下所示:

{
    "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,并不断缩小到感兴趣的领域。