powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Выбор деревянной таблицы рекурсией (DB2)
5 сообщений из 5, страница 1 из 1
Выбор деревянной таблицы рекурсией (DB2)
    #38588226
Dozent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем добрый день, прошу подскажите как правильно выбрать древовидную таблицу?

Из того что прочитал, выбирается такая таблица рекурсией. СУБД DB2 (помойму 10 версии)

вот что написал

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
WITH Rec(ID, PARENT, ORGANIZATION, NAME, IS_EXCLUDE_FROM_SELECTION)  
AS
 (
   SELECT ID, PARENT, ORGANIZATION, NAME, IS_EXCLUDE_FROM_SELECTION
   FROM
   CLINIC.ORGANIZATION_DEPARTMENTS 
  
 UNION ALL
  
 SELECT pOrgDep.ID, pOrgDep.PARENT, pOrgDep.ORGANIZATION, pOrgDep.NAME, pOrgDep.IS_EXCLUDE_FROM_SELECTION
   FROM
    Rec r , CLINIC.ORGANIZATION_DEPARTMENTS pOrgDep
   where r.PARENT=pOrgDep.ID
)
 SELECT * FROM Rec



Не вижу ни какой разницы между обычной выборкой из таблицы, даные теже, если добавить после WITH слово recursive, выдаёт ошибку

An unexpected token "Rec(ID, PARENT, ORGANIZATION, NAME, IS_EXCLUDE" was found following "WITH recursive "

Что не так?
...
Рейтинг: 0 / 0
Выбор деревянной таблицы рекурсией (DB2)
    #38588263
Dozent,

у тебя в якорной части рекурсии нет никаких ограничений на корни деревьев. вот в итоге вся таблица и выбирается. попробуй задать некий один корень, тогда увидишь, что выбираются только его ветки...
...
Рейтинг: 0 / 0
Выбор деревянной таблицы рекурсией (DB2)
    #38588502
Dozent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так я точно такие же условия могу задат ьи в обычной выборке...
...
Рейтинг: 0 / 0
Выбор деревянной таблицы рекурсией (DB2)
    #38588587
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dozent,

Добрый день.

Не уверен, подойдет ли это под ваше определение "выбрать древовидную таблицу".
Вот пример

Код: 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.
declare global temporary table ORGANIZATION_DEPARTMENTS (
id int, parent int, organization varchar(10)
) with replace on commit preserve rows not logged;

insert into session.ORGANIZATION_DEPARTMENTS 
values 
  (1, 1, '11')
, (2, 1, '22')
, (3, 1, '33')
, (4, 2, '44')
, (5, 5, '55');

with rec (level, id, organization, chain) as (
select 1, id, organization, cast('|'||id||'|' as varchar(50))
from session.ORGANIZATION_DEPARTMENTS
where id=parent
  union all
select r.level+1, pOrgDep.id, pOrgDep.organization, r.chain||pOrgDep.id||'|'
from rec r, session.ORGANIZATION_DEPARTMENTS pOrgDep
where pOrgDep.parent=r.id and pOrgDep.id<>pOrgDep.parent
)
select level, id, repeat(' ', level-1)||organization
from rec
order by chain;

Здесь в первой части рекурсинного запроса выбираются только записи, у которых нет родителей.
В примере это те, у кого id=parent.
...
Рейтинг: 0 / 0
Выбор деревянной таблицы рекурсией (DB2)
    #38589156
Dozentну так я точно такие же условия могу задать и в обычной выборке...

тогда ты, скорее всего, не понимаешь что такое дерево и как оно хронится в твоей таблице... либо глубина твоего дерева не превышает 2 (то есть по сути у тебя парные обрубки: родитель - дочка).
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Выбор деревянной таблицы рекурсией (DB2)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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