Получение дубликатов при разборе массива JSON в Oracle - PullRequest
0 голосов
/ 05 июля 2019

У нас есть следующая структура Json, хранящаяся в поле CLOB. Полезная нагрузка из таблицы TB_PAYLOAD: -

{
    "data":
    {
        "orderItems":[
            {
            ...
                "associations":[
                    {
                        "type":"Product"
                        "id":"xyz"
                        ..
                    },
                    {
                        "type":"ProductOrderItem"
                        "id":"KBCDDD"
                        ..
                    },
                    {
                        "type":"ABCD"
                        "id":"123abc"
                        ..
                    }
                    ....
                ]
            },
            {
             ...
            }
        ]
    }
}

У нас есть несколько элементов orderItems, и каждый элемент orderItems имеет несколько ассоциаций.Мы пытаемся получить данные из association.id, когда association.type = "Product" или "ProductOrderItem" .который заполняет 2 разных столбца.

Например, для указанного выше файла Json мы хотели бы, чтобы результат был: -

PRODUCT_ID            xyz
PRODUCTORDERITEM_ID   KBCDDD

мы пробовали следующий запрос, но это приводит к дублированию, так как мы имеемнесколько элементов order, которые приводят к перекрестному соединению: -

SELECT O.ENTITY_ID , CASE WHEN T.TYPE_1 IS NOT NULL THEN T.PRD_ID_1 END AS PRODUCT,
CASE WHEN T2.TYPE_2 IS NOT NULL THEN T2.PRD_ID_2 END AS PRODUCTORDERITEM
FROM 
(
SELECT 
ENTITY_ID , PAYLOAD
FROM TB_PAYLOAD  
WHERE ROWNUM = 1
)
o
 LEFT JOIN json_table(o.PAYLOAD, '$.data.orderItems[*].associations[*]' 
         columns (
               prd_id_1  VARCHAR2(100) PATH '$.id',
               type_1  VARCHAR2(100) PATH '$.type'
         )
     ) t
on t.type_1 in ('Product')
 LEFT JOIN json_table(o.PAYLOAD, '$.data.orderItems[*].associations[*]' 
         columns (
               prd_id_2  VARCHAR2(100) PATH '$.id',
               type_2  VARCHAR2(100) PATH '$.type'
         )
     ) t2
on t2.type_2 in ('ProductOrderItem')
;

Мы хотим знать, можем ли мы получить решение без использования PL / SQL.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...