powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Может кто-то знает алгоритм
7 сообщений из 7, страница 1 из 1
Может кто-то знает алгоритм
    #34652236
Пусть есть таблица (id, parentid)
где
id - уникальный идентификатор
parentid - идентификатор родительского элемента (NULL, если это корень)

Может кто подскажет, возможно ли построить на SQL-92 запрос, который вернет
пару
(id, rootid), где rootid - корневой элемент для id
...
Рейтинг: 0 / 0
Может кто-то знает алгоритм
    #34652255
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталий Руссинковскийвозможно ли построить на SQL-92
Нет. Точнее, можно только если максимальная высота дерева ограничена и заранее известна.

P.S. Ну а за желание делать что-то "на SQL-92", равно как и на "SQL-более поздних" вне сугубо учебных заданий следует.....
...
Рейтинг: 0 / 0
Может кто-то знает алгоритм
    #34652751
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот на Firebird 2.0 (наверняка не совместим со стандартом SQL-92, но кто совместим в наше время?)
таблица:
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE OBJECT (
       ID BIGINT NOT NULL,
       PARENTID BIGINT,
       CONSTRAINT PK_OBJECT PRIMARY KEY (ID)
);
ALTER TABLE OBJECT ADD CONSTRAINT FK_OBJECT_1 FOREIGN KEY (PARENTID) REFERENCES OBJECT(ID);
Процедура получения корня:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE PROCEDURE ROOT (ID BIGINT)
returns (ROOTID BIGINT)
AS 
  declare variable ParentID BigInt;
begin
for select ParentID from object where (ID=:ID) into :ParentID do
begin
  if (ParentID is NULL) then
  begin
    RootID = ID;
    suspend;
  end else
  begin
    for select RootID from Root(:ParentID) into :RootID do
    begin
      suspend;
    end
  end
end
end
запрос:
Код: plaintext
1.
select ID, ParentID, RootID from object
left join Root(ID) on ID=ID
...
Рейтинг: 0 / 0
Может кто-то знает алгоритм
    #34653412
Я понимаю, что с помошью хранимой процедуры это можно сделать. Вопрос в том - можно ли это сделать с помощью запроса
...
Рейтинг: 0 / 0
Может кто-то знает алгоритм
    #34653425
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно. Забыв про SQL-92
...
Рейтинг: 0 / 0
Может кто-то знает алгоритм
    #34655793
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталий Руссинковский пишет:
> Я понимаю, что с помошью хранимой процедуры это можно сделать. Вопрос в
> том - можно ли это сделать с помощью запроса

На стандартном - нельзя. Только с использованием т.р. рекурсивных
запросов. Типа CONNECT BY в оракле.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Может кто-то знает алгоритм
    #34660252
MishenkovKS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или добавить транзитивное замыкание на эту таблицу - и тогда можно запросом
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Может кто-то знает алгоритм
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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