powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / получить иерархию
4 сообщений из 4, страница 1 из 1
получить иерархию
    #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
получить иерархию
    #40066694
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
minya13_85,

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

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

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

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


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