powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получить корень любого узла
10 сообщений из 10, страница 1 из 1
Получить корень любого узла
    #39407216
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть дерево: ID, PARENT, NAME.
Как правильно получить корень любого узла?
Думаю, что можно использовать WITH RECURSIVE, но не понимаю, как.
...
Рейтинг: 0 / 0
Получить корень любого узла
    #39407224
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

в дереве только один корень
...
Рейтинг: 0 / 0
Получить корень любого узла
    #39407228
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, поставим вопрос по-другому.
Есть несколько корневых узлов, у которых parent равно нулю или NULL
...
Рейтинг: 0 / 0
Получить корень любого узла
    #39407230
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

выбираешь с помощшью сте всю ветку, результат сортируешь, добавляешь first 1.
...
Рейтинг: 0 / 0
Получить корень любого узла
    #39407233
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кучно пошли нечитатели доки и форума, то один, теперь второй... Ты ж вроде не новичок, насколько я помню.
В форуме точно были канонические примеры работы с деревом.
...
Рейтинг: 0 / 0
Получить корень любого узла
    #39407235
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Получить корень любого узла
    #39407241
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

на рекурсивном шаге выбираешь родителя тек. узла, если тек. узел не "корень"
В самом селекте ставишь фильтр чтобы видеть только "корень"
...
Рейтинг: 0 / 0
Получить корень любого узла
    #39407268
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо всем
...
Рейтинг: 0 / 0
Получить корень любого узла
    #39407475
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH RECURSIVE CTE AS (
      SELECT R.ID,
             R.NAME,
             R.PARENT
        FROM REGIONS R WHERE ID = 1192

      UNION ALL

      SELECT R.ID,
             R.NAME,
             R.PARENT
        FROM REGIONS R
        INNER JOIN CTE ON CTE.PARENT = R.ID

    )
    SELECT FIRST 1 DISTINCT ID, NAME, PARENT
      FROM CTE ORDER BY ID



исходные данные


результат


тут ещё вот нарыл статью
http://www.sqlbooks.ru/printarticle.aspx?part=02&file=sql200509
...
Рейтинг: 0 / 0
Получить корень любого узла
    #39407500
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Правильно?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH RECURSIVE CTE AS (
      SELECT R.ID,
             R.NAME,
             R.PARENT
        FROM REGIONS R WHERE ID = 1192

      UNION ALL

      SELECT R.ID,
             R.NAME,
             R.PARENT
        FROM REGIONS R
        INNER JOIN CTE ON CTE.PARENT = R.ID

    )
    SELECT FIRST 1 DISTINCT ID, NAME, PARENT
      FROM CTE ORDER BY ID




я бы написал вот так
Код: sql
1.
2.
3.
    SELECT  ID, NAME, PARENT
      FROM CTE 
    WHERE COALESCE(PARENT,0) = 0  -- ибо "... у которых parent равно нулю или NULL "


избавившись от неявного предположения что ID > PARENT
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получить корень любого узла
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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