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

Из того что прочитал, выбирается такая таблица рекурсией. СУБД 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
17.03.2014, 14:29
    #38588263
Выбор деревянной таблицы рекурсией (DB2)
Dozent,

у тебя в якорной части рекурсии нет никаких ограничений на корни деревьев. вот в итоге вся таблица и выбирается. попробуй задать некий один корень, тогда увидишь, что выбираются только его ветки...
...
Рейтинг: 0 / 0
17.03.2014, 16:56
    #38588502
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор деревянной таблицы рекурсией (DB2)
ну так я точно такие же условия могу задат ьи в обычной выборке...
...
Рейтинг: 0 / 0
17.03.2014, 18:24
    #38588587
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор деревянной таблицы рекурсией (DB2)
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
18.03.2014, 11:41
    #38589156
Выбор деревянной таблицы рекурсией (DB2)
Dozentну так я точно такие же условия могу задать и в обычной выборке...

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


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