with prod as (select 10 id,'1008' code from dual union all
select 11 id,'1582' code from dual union all
select 12 id,'1583' code from dual union all
select 13 id,'2023' code from dual union all
select 14 id,'2025' code from dual union all
select 15 id,'2030' code from dual union all
select 16 id,'2222' code from dual
),
prre as (select 10 detail_product_id,90 master_product_id from dual union all
select 12 detail_product_id,11 master_product_id from dual union all
select 91 detail_product_id,92 master_product_id from dual union all
select 14 detail_product_id,12 master_product_id from dual union all
select 90 detail_product_id,93 master_product_id from dual union all
select 11 detail_product_id,91 master_product_id from dual union all
select 15 detail_product_id,12 master_product_id from dual union all
select 13 detail_product_id,12 master_product_id from dual union all
select 94 detail_product_id,95 master_product_id from dual
)
select
prod.code,
connect_by_root prod.code group_type
from prre,prod
where prre.detail_product_id = prod.id
connect by nocycle prior prre.detail_product_id = prre.master_product_id
start with prod.code in ('1008', '1582')
Результат:
CODE GROUP_TYPE
1582 1582
1583 1582
2030 1582
2025 1582
2023 1582
1008 1008
Как мне переписать его в полярный формат?
Начальный dfs будет выглядеть так:
import polars as pl
prod = pl.DataFrame({'id': [10,11,12,13,14,15,16],
'code': ['1008','1582','1583','2023','2025','2030','2222']
})
prre = pl.DataFrame({'detail_product_id': [10,12,91,14,90,11,15,13,94],
'master_product_id': [90,11,92,12,93,91,12,12,95]
})
Но как быть дальше?
Задача простым языком:
- начните с prod df, где код «1008» или «1582».
- взять соответствующий идентификатор
- используя этот цикл идентификаторов через prre df: где бы вы ни нашли этот идентификатор в поле Detail_product_id, соответствующий код продукта df будет в списке результатов вместе со значением корневого кода (с именем group_type).
- просмотрите master_product_id- s к этим Detail_product_id-s рекурсивно, повторяя предыдущий шаг
11 -> 1582
|-12 -> 1583
|-13 -> 2023
|-14 -> 2025
|-15 -> 2030
Подробнее здесь: https://stackoverflow.com/questions/787 ... -to-polars