У нас есть следующая структура 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.
Заранее спасибо.