powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / запрос по развороту дерева
8 сообщений из 8, страница 1 из 1
запрос по развороту дерева
    #32262742
Acue
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Есть такой вопрос.

Таблица адресов (суть - дерево), пусть уровней максимум 3.

Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE  "Address"  (
     "id"         INTEGER NOT NULL,
     "nbLevel"    SMALLINT NOT NULL,
     "idMaster"   INTEGER 
       references  "Address" ( "id" ) on delete cascade,
     "chName"     VARCHAR( 63 ) COLLATE PXW_CYRL);

Можно ли придумать запрос (не ХП), чтобы нижеприведенный запрос без UNION

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
на входе                         на выходе
 id  nbLevel idMaster             id      l1      l2     l3
 ---------------------            ----------------------------
 
  1        1        null               1         1       null    null
  2        2          1                  2         1         2       null  
  3        2          1                  3         1         3       null
  4        3          2                  4         1         2         4 


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
select a3. "id" ,
       a1. "id" ,
       a2. "id" ,
       a3. "id" 
  from  "Address"  a1
       join  "Address"  a2 on a1. "id" =a2. "idMaster" 
       join  "Address"  a3 on a2. "id" =a3. "idMaster" 
 where a1. "nbLevel" = 1 
union
select a2. "id" ,
       a1. "id" ,
       a2. "id" ,
       cast(null as integer)
  from  "Address"  a1
       join  "Address"  a2 on a1. "id" =a2. "idMaster" 
 where a1. "nbLevel" = 1 
union
select a1. "id" ,
       a1. "id" ,
       cast(null as integer),
       cast(null as integer)
  from  "Address"  a1
 where a1. "nbLevel" = 1 


FB 1.0.3
...
Рейтинг: 0 / 0
запрос по развороту дерева
    #32262807
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я ХП использую. Уровней даже не знаю сколько.
...
Рейтинг: 0 / 0
запрос по развороту дерева
    #32262836
Acue
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не зная сколько уровней, ИМХО из ХП можно только склеенную строку вернуть.
...
Рейтинг: 0 / 0
запрос по развороту дерева
    #32263038
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Acue
ну почему же
рекурсивная функция выполнит полный разбор дерева, причем не важно сколько уровней...
...
Рейтинг: 0 / 0
запрос по развороту дерева
    #32263147
Acue
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarWind
>>рекурсивная функция выполнит полный разбор дерева, причем не важно сколько уровней...
В этом я не сомневаюсь, я сказал лишь о том, что в IB/FB нельзя определить процедуру с вариативным числом возвращаемых параметров. Если посмотреть первый пост, то мне требуется вернуть id каждого из уровней.
...
Рейтинг: 0 / 0
запрос по развороту дерева
    #32263184
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Acue
я это обходил созданием временной таблицы
...
Рейтинг: 0 / 0
запрос по развороту дерева
    #32263219
Acue
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно поподробнее, пожайлуста, про временную таблицу в этом контексте.
...
Рейтинг: 0 / 0
запрос по развороту дерева
    #32264602
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что тут подробнее...
в моем случае была довольно универсальная таблица состоящая из полей Id, F1,F2,F3,F4,F5. В поле Id я заносил некоторфый идентификатор, который генерился при помощи генератора. Это позволяло исключить проблемы при одновременном вызове процы разными пользователями. А в поля Fn заносилась информация. В частности Id строк. В твоем случае проца может заносить так же level. А потом делаешь селек из полученной таблицы с необходимым объеденением с реальными справочниками и все. Только не забывай в конце удалить записи с временной таблицы.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / запрос по развороту дерева
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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