Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.21;
Скачать: CL | DM;

Вниз

Знатокам SQL посвящается...   Найти похожие ветки 

 
Leonon   (2002-10-31 15:59) [0]

Привет, Уважаемые Мастера! Есть Таблица1, которая организует древовидную иерархию по двум полям ID и ParentID. Задача выбрать все записи, которые находятся в подчинении у заданной. В Oracle это просто, путем следующего запроса:
SELECT * FROM NODES CONNECT BY PRIOR ParentID=ID
START WHITH ID=N /*где N номер узла*/. Однако в Local SQL такой фишки нет. Как грамотно построить запрос, если число подчинений за ранее не известно???


 
3JIA9I CyKA ©   (2002-10-31 16:04) [1]

Удалено модератором


 
Delirium ©   (2002-10-31 16:16) [2]

В Local SQL действительно невозможно построить адекватный такой задаче запрос. Остаётся фильтровать TDataSet.


 
Jeer ©   (2002-10-31 16:31) [3]

Можно, но не всегда эффективно.

Рекурсивно заполняется TTreeView на основе ID и PARENT, что м.б. громоздко, но если записей не много - то терпимо.
Далее, по TTreeView строится ветка вниз или вверх и формируется строка с нужными ID

Далее - SELECT ... WHERE ID IN (...)


 
Delirium ©   (2002-10-31 16:34) [4]

"Можно, но не всегда эффективно" - пример, пожалуйста


 
Leonon   (2002-10-31 17:04) [5]

Причем задача решается просто, если знать, что колличество вложений не привышает зааданное число. Так как быть?

Jeer, а что находится в скобках WHERE ID IN ( ? )


 
Leonon   (2002-10-31 17:18) [6]

2 Jeer

Я тебя понял.


 
MMF ©   (2002-10-31 17:41) [7]

http://sdm.viptop.ru/articles/sqltrees.html
http://mathc.chat.ru/a3/articl03.htm
http://www.j2.ru/frozenfido/ru.algorithms/143013c9b96ef.html
Дома у меня есть еще ссылки, я довольно плотно этой темой занимался. Вначале пошел по неверному пути матрицы смежности (чего тебе делать не советую) - в дереве размером в 18000 элементов уже было заметно медленно суммирование параметра от произвольного узла, вычисление высоты поддерева и др. делал на InterBase6.


 
Jeer ©   (2002-10-31 17:59) [8]

Delirium © (31.10.02 16:34)
"Можно, но не всегда эффективно" - пример, пожалуйста

Не точно выразился (пропустил уточнение) - можно построить эквивалент такого запроса использованием двух раздельных SELECT и
обходом дерева на клиенте.
Если SQL engine не имеет таких возможностей.



Страницы: 1 вся ветка

Текущий архив: 2002.11.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
6-69468
Azbul
2002-09-26 10:33
2002.11.21
как програмно сделать чтобы народ в инет ходит не мог?


14-69564
mvg_first
2002-10-31 10:48
2002.11.21
А что случилось с клиентами для этих форумов?


3-69181
Tornado
2002-10-30 22:07
2002.11.21
ADO + Access


3-69148
Jony
2002-10-30 20:57
2002.11.21
Как передать несколько параметров в запросе следующей конструкции


1-69225
The_Vizit0r!
2002-11-09 19:13
2002.11.21
Проблема с image