Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
ВнизЗнатокам 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c