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

Откуда: УРАЛ
Сообщений: 21
Есть задача:
Исходные данные: набор звеньев (ID_START, ID_END).
Желаемый результат: цепочки из звеньев, у всех звеньев которых ID_END левой цепочке = ID_START правой цепочки. Кольца замкнуты. Звеньев от 2 до 8.

Сейчас реализовано тупо JOINом типа
select ...
from CHAIN_ELEMENT t1, CHAIN_ELEMENT t2, CHAIN_ELEMENT t3 .........
where t1.ID_END = t2.ID_START and t2.ID_END = t3.ID_STARt .......... tN.ID_END = t1.ID_START;

Есть ли более оптимальные решения для реализации данного алгоритма ?

Oracle 10g/Windows.
22 июл 09, 21:17    [7447764]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм поиска цепочек по исходным звеньям.  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
Something like:

SELECT  LTRIM(SYS_CONNECT_BY_PATH('[' || ID_START || ' - ' || ID_END || ']','==>'),'==>') CHAIN
  FROM  CHAIN_ELEMENT C1
  WHERE CONNECT_BY_ISLEAF = 1
  START WITH 0 = (SELECT COUNT(*) FROM CHAIN_ELEMENT C2 WHERE C2.ID_END = C1.ID_START)
  CONNECT BY ID_START = PRIOR ID_END
/

SY.
22 июл 09, 22:24    [7447916]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить