У меня есть таблица в postgres с именем 'books' с одним столбцом jsonb под названием 'j' со следующими данными:
{
"entity": "Book",
"processes": [
{ "process": [
{ "processname": "Buy",
"option": "none",
"processes": [
{ "process": [
{ "processname": "Order",
"option": "none"
}
]
},
{ "process": [
{ "processname": "Arrive",
"option": "none"
}
]
},
{ "process": [
{ "processname": "Enter",
"option": "none"
}
]
}
]
}
]
},
{ "process": [
{ "processname": "Use",
"option": "none",
"processes": [
{ "process": [
{ "processname": "Lend",
"option": "*",
"processes": [
{
"process": [
{
"processname": "Borrow",
"option": "none"
}
]
},
{
"process": [
{
"processname": "Return",
"option": "none"
}
]
}
]
}
]
}
]
}
]
},
{ "process": [
{ "processname": "Scrap",
"option": "none",
"processes": [
{ "process": [
{ "processname": "Sold",
"option": "0"
}
]
},
{ "process": [
{ "processname": "Scrap",
"option": "0"
}
]
}
]
}
]
}
]
}
Я хочу получить все имена процессов вместе с именами процессов их родителей (т. е. путем к ним) .
Пока у меня есть следующий код, но объединяющая часть не работает.
with recursive jsonrecursion as
(
select process -> 'processname' as processname, '{}'::int[] as superior, 0 as lv
from books, jsonb_array_elements(j-> 'processes') processes, jsonb_array_elements(processes-> 'process') process
where process -> 'processes' is NULL
union all
select process -> 'processname' as processname, superior || process -> 'processname', lv+1
from books, jsonrecursion
where not process -> 'processname' = any(superior)
)
SELECT processname, superior, lv
FROM jsonrecursion;
Может ли кто-нибудь помочь, пожалуйста? Спасибо