Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / получить иерархию / 4 сообщений из 4, страница 1 из 1
28.04.2021, 13:12
    #40066691
minya13_85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить иерархию
Есть 2 таблицы, иерархия и справочник продуктов, хочу получить таблицу вида, может быть максимум 5 уровней иерархии:

id product_lev1_id product_lev1_name product_lev2_id product_lev2_name product_lev3_id product_lev3_name product_lev4_id product_lev4_name product_lev5_id product_lev5_name1 41 продукт41 31 продукт31 21 продукт21 11 продукт11 1 продукт12 32 продукт32 22 продукт22 2 продукт2 2 продукт2 2 продукт25 41 продукт41 31 продукт31 15 продукт15 5 продукт5 5 продукт511 41 продукт41 31 продукт31 21 продукт21 11 продукт11 11 продукт1121 41 продукт41 31 продукт31 21 продукт21 21 продукт21 21 продукт2131 41 продукт41 31 продукт31 31 продукт31 31 продукт31 31 продукт3141 41 продукт41 41 продукт41 41 продукт41 41 продукт41 41 продукт4122 32 продукт32 22 продукт22 22 продукт22 22 продукт22 22 продукт2232 32 продукт32 32 продукт32 32 продукт32 32 продукт32 32 продукт3215 41 продукт41 31 продукт31 15 продукт15 15 продукт15 15 продукт15

Написал запрос вида, помогите его докрутить до нужного результата.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
with hier as 
(

SELECT 1 id,11 par_id,'MAIN' code from dual
UNION
SELECT 11,21,'MAIN' from dual
UNION
SELECT 21,31,'MAIN' from dual
UNION
SELECT 31,41,'MAIN' from dual
UNION
SELECT 41,NULL,'MAIN' from dual
union
SELECT 2,22,'MAIN' from dual
UNION
SELECT 22,32,'MAIN' from dual
UNION
SELECT 32,NULL,'MAIN' from dual
UNION
SELECT 5,15,'MAIN' from dual
UNION
SELECT 15,31,'MAIN' from dual
)
,product as
(
SELECT 1 id,'продукт1' lname from dual
UNION
SELECT 11,'продукт11' from dual
UNION
SELECT 21,'продукт21' from dual
UNION
SELECT 31,'продукт31' from dual
UNION
SELECT 41,'продукт41' from dual
UNION
SELECT 2,'продукт2' from dual
union
SELECT 22,'продукт22' from dual
UNION
SELECT 32,'продукт32' from dual
UNION
SELECT 5,'продукт5' from dual
UNION
SELECT 15,'продукт15' from dual
)


,hh AS 
(
SELECT h.id,h.par_id,p.lname,h.code
FROM hier h
LEFT JOIN product p ON p.id=h.id
WHERE h.code='MAIN'
)

SELECT COALESCE(e.id,d.id,c.id,b.id,a.id) id
,a.id product_lev1_id, a.lname  product_lev1_name
,COALESCE(b.id,a.id) product_lev2_id,COALESCE(b.lname,a.lname) product_lev2_name
,COALESCE(c.id,b.id,a.id) product_lev3_id,COALESCE(c.lname,b.lname,a.lname) product_lev3_name
,COALESCE(d.id,c.id,b.id,a.id) product_lev4_id,COALESCE(d.lname,c.lname,b.lname,a.lname) product_lev4_name
,COALESCE(e.id,d.id,c.id,b.id,a.id) product_lev5_id,COALESCE(e.lname,d.lname,c.lname,b.lname,a.lname) product_lev5_name
FROM hh a
LEFT JOIN hh b ON a.id=b.par_id
LEFT JOIN hh c ON b.id=c.par_id
LEFT JOIN hh d ON c.id=d.par_id
LEFT JOIN hh e ON d.id=e.par_id
WHERE a.par_id IS NULL
...
Рейтинг: 0 / 0
28.04.2021, 13:16
    #40066694
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить иерархию
minya13_85,

Он идеален, не надо ничего докручивать.
...
Рейтинг: 0 / 0
28.04.2021, 13:18
    #40066696
minya13_85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить иерархию
crutchmaster,

так мне надо получить таблицу вида, которую я указал выше, а этот запрос возвращает только нижний уровень и до самого верха. Средние уровни как получить?
...
Рейтинг: 0 / 0
29.04.2021, 03:44
    #40067047
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить иерархию
minya13_85
только нижний уровень и до самого верха

minya13_85
Средние уровни как получить?

Не понял. Почему средние уровни не входят в множество "нижний уровень и до самого верха"?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / получить иерархию / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]