Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Дерево  [new]
Sergant82
Member

Откуда:
Сообщений: 490
Есть таблица вида
id...............parent..............title

где id - идентификатор элемента
parent - идентификатор родителя (соответсвенно id)
title - наименование

Как зная идентификатор самого верхнего родителя можно выбрать самые нижние листья
12 фев 07, 12:18    [3770755]     Ответить | Цитировать Сообщить модератору
 Re: Дерево  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116198
CONNECT_BY_ISLEAF в десятке

SQL> select *
  2    from (select connect_by_isleaf leaf, e.*
  3            from scott.emp e
  4          connect by prior empno = mgr
  5           start with mgr is null)
  6   where leaf = 1
  7  /

      LEAF EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
---------- ----- ---------- --------- ----- ----------- --------- --------- ------
         1  7876 ADAMS      CLERK      7788 23.05.1987    1100,00               20
         1  7369 SMITH      CLERK      7902 17.12.1980     800,00               20
         1  7499 ALLEN      SALESMAN   7698 20.02.1981    1600,00    300,00     30
         1  7521 WARD       SALESMAN   7698 22.02.1981    1250,00    500,00     30
         1  7654 MARTIN     SALESMAN   7698 28.09.1981    1250,00   1400,00     30
         1  7844 TURNER     SALESMAN   7698 08.09.1981    1500,00      0,00     30
         1  7900 JAMES      CLERK      7698 03.12.1981     950,00               30
         1  7934 MILLER     CLERK      7782 23.01.1982    1300,00               10

8 rows selected

SQL>
12 фев 07, 12:27    [3770815]     Ответить | Цитировать Сообщить модератору
 Re: Дерево  [new]
Elic
Member

Откуда:
Сообщений: 29980
+ STFF Чем заменить CONNECT_BY_ISLEAF в девятке ?
12 фев 07, 12:33    [3770867]     Ответить | Цитировать Сообщить модератору
 Re: Дерево  [new]
Sergant82
Member

Откуда:
Сообщений: 490
Это в принципе то но нужны листья только определенного родителя.
Первый раз столнулся с деревьями. (((
12 фев 07, 12:41    [3770923]     Ответить | Цитировать Сообщить модератору
 Re: Дерево  [new]
Elic
Member

Откуда:
Сообщений: 29980
Elic
+ STFF Чем заменить CONNECT_BY_ISLEAF в девятке ?
Либо
select ... from (select ..., rownum as rn, max(rownum) over (partition by rownum - level) as leaf_rn from ...) where rn = leaf_rn

Sergant82
Это в принципе то но нужны листья только определенного родителя.
RTFM start with
12 фев 07, 12:43    [3770943]     Ответить | Цитировать Сообщить модератору
 Re: Дерево  [new]
Sergant82
Member

Откуда:
Сообщений: 490
Видимо сам как дерево так и не понял ничего((
Спасибо всем буду разбираться еще
12 фев 07, 13:03    [3771092]     Ответить | Цитировать Сообщить модератору
 Re: Дерево  [new]
Elic
Member

Откуда:
Сообщений: 29980
Sergant82
Видимо сам как дерево так и не понял ничего((
RTFM Hierarchical Queries (FAQ)
12 фев 07, 13:09    [3771138]     Ответить | Цитировать Сообщить модератору
 Re: Дерево  [new]
Sergant82
Member

Откуда:
Сообщений: 490
Так и не разобрался.
Ситуация такая: Есть корень дерева у этого корня три поддерева.
Нужно чтобы в результате запроса получилось вот такое:

name ..............................title..............идентификатор поддерева...........идентификатор листа
1 поддерево.....................лист1.........................1..........................................323
1 поддерево.....................лист2.........................1..........................................32
1 поддерево.....................лист3.........................1..........................................3233
2 поддерево.....................лист1.........................2..........................................3253
2 поддерево.....................лист2.........................2..........................................3263
2 поддерево.....................лист3.........................2..........................................3283
2 поддерево.....................лист4.........................2..........................................3293
3 поддерево.....................лист1.........................3..........................................3233
3 поддерево.....................лист2.........................3..........................................3243
3 поддерево.....................лист3.........................3..........................................3263
3 поддерево.....................лист4.........................3..........................................3273
3 поддерево.....................лист5.........................3..........................................32883
12 фев 07, 14:33    [3771811]     Ответить | Цитировать Сообщить модератору
 Re: Дерево  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116198
Отсюда дойдете ?

SQL> select cbr, empno, ename, mgr
  2    from (select connect_by_root(empno) cbr, connect_by_isleaf leaf, e.*
  3            from scott.emp e
  4          connect by prior empno = mgr
  5           start with empno in (7566, 7698))
  6  where leaf = 1
  7  /

       CBR EMPNO ENAME        MGR
---------- ----- ---------- -----
      7566  7876 ADAMS       7788
      7566  7369 SMITH       7902
      7698  7499 ALLEN       7698
      7698  7521 WARD        7698
      7698  7654 MARTIN      7698
      7698  7844 TURNER      7698
      7698  7900 JAMES       7698

7 rows selected

SQL> 
12 фев 07, 14:39    [3771849]     Ответить | Цитировать Сообщить модератору
 Re: Дерево  [new]
Sergant82
Member

Откуда:
Сообщений: 490
я так понимаю это для десятки а есть что то для девятки
12 фев 07, 14:47    [3771906]     Ответить | Цитировать Сообщить модератору
 Re: Дерево  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116198
Sergant82
я так понимаю это для десятки а есть что то для девятки


Так, connect_by_isleaf для девятки Elic Вам уже показал.
А вот его же

CONNECT_BY_ROOT для девятки
12 фев 07, 14:53    [3771957]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить