powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос на построение дерева
4 сообщений из 4, страница 1 из 1
Запрос на построение дерева
    #39875112
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, есть таблица

catalog (id, parent_id, name)

product(id, catalog_id, name)

Нужно построить дерево

-Каталог1
--Каталог1.1
---Продукт из Каталога1.1
--Каталог1.2
---Продукт из Каталога1.2
-Каталог2
--Каталог2.1
---Продукт из Каталога2.1
---Продукт из Каталога2.1

Не догоняю, как можно свести это с двумя таблицами, понятно если это была бы таблица catalog только там банально connect by prior, но здесь две таблицы и как быть?
...
Рейтинг: 0 / 0
Запрос на построение дерева
    #39875114
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

Сначала дерево + зафиксируй порядок, потом джойни продукты к узлам
...
Рейтинг: 0 / 0
Запрос на построение дерева
    #39875169
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select id, name
   from catalog 
start with
connect by prior

union all

select id, name
   from product where catalog_id in catalog



далее, грамотно это дело отсортировать
...
Рейтинг: 0 / 0
Запрос на построение дерева
    #39875342
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

Код: plsql
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.
--  create table
create table catalog (id number, id_parent number ,name varchar2(100));
create table product (id number, id_catalog number ,name varchar2(100));
-- insert into  catalog
insert into  catalog values (1,null,'Каталог 1');
insert into  catalog values (11,1,'Каталог1-1');
insert into  catalog values (12,1,'Каталог1-2');
insert into  catalog values (13,1,'Каталог1-3');
insert into  catalog values (121,12,'Каталог1-2-1');
insert into  catalog values (2,null,'Каталог2');
insert into  catalog values (21,2,'Каталог2-1');
insert into  catalog values (22,2,'Каталог2-2');
-- insert into  product
insert into  product values (1,12,'Продукт1');
insert into  product values (2,121,'Продукт2');
insert into  product values (22,121,'Продукт3');
insert into  product values (23,121,'Продукт4');
insert into  product values (3,13,'Продукт5');
insert into  product values (4,22,'Продукт6');
insert into  product values (6,null,'Продукт7');
insert into  product values (7,212121,'Продукт8');
--
select lpad(' ',level*4)||t.name name
  from (select c.id, c.id_parent, c.name
          from catalog c
        union all
        select null as id, p.id_catalog as id_parent, p.name
          from product p
         where p.id_catalog in (select id from catalog)) t
 start with t.id_parent is null
connect by prior t.id = t.id_parent
order siblings by t.id_parent

----------------
-- Result
----------------
1     Каталог 1
2         Каталог1-1
3         Каталог1-2
4             Каталог1-2-1
5                 Продукт4
6                 Продукт2
7                 Продукт3
8             Продукт1
9         Каталог1-3
10             Продукт5
11     Каталог2
12         Каталог2-1
13         Каталог2-2
14             Продукт6
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос на построение дерева
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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