powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Найти непосредств.родителя в табл. вложенных множеств
5 сообщений из 5, страница 1 из 1
Найти непосредств.родителя в табл. вложенных множеств
    #32040184
Alex_Jou
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице-дереве, построенной по принципу вложенных множеств)

id
lft
rgt
name

никак не могу составить запрос, с помощью которого можно было найти непосредственного родителя некоторого узла (:

Мож, хто подскажет?
...
Рейтинг: 0 / 0
Найти непосредств.родителя в табл. вложенных множеств
    #32040218
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
id - id обьекта
lft - указатель на что?(предидущего)
rgt - указатель на ?(потомка)
name
или как ,а то простите не понятно
...
Рейтинг: 0 / 0
Найти непосредств.родителя в табл. вложенных множеств
    #32040230
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
статья Joe Celko http://sdm.viptop.ru/articles/sqltrees.html
или на http://ib.demo.ru/develop.htm
...
Рейтинг: 0 / 0
Найти непосредств.родителя в табл. вложенных множеств
    #32040258
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще лучше использовать двойную связь лево-право и дитё-папа. Но можно и без последней. В моём примере вычисляеются родители по множественной модели, parent используется только для проверки. Принцип такой - найти все внешнии множества, но что бы не было промежуточных
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
declare @tree table (id int identity, parent int , n varchar( 33 ), le int, ri int)

set nocount on
insert @tree select  0 , 'K', 1 , 16 
insert @tree select  1 , '1', 2 , 13 
insert @tree select  2 , '11', 3 , 4 
insert @tree select  2 , '12', 5 , 12 
insert @tree select  4 , '121', 6 , 7 
insert @tree select  4 , '122', 8 , 9 
insert @tree select  4 , '123', 10 , 11 
insert @tree select  1 , '2', 14 , 15 
   -- посмотреть дерево
 
select t1.le, t1.ri, t1.id, t1.parent,replicate(' ',count(*))+t1.n
  from @tree t1, @tree t2
  where t2.le<=t1.le and t2.ri>=t1.ri
  group by t1.n, t1.le,t1.le, t1.ri, t1.parent,t1.id
  order by t1.le


 -- дети и их родители
 
select t0.id, t.id par, t0.parent 
  from @tree t, @tree t0 
  where t.le<t0.le and t.ri>t0.ri 
    and not exists(select * from @tree t1 
         where t1.le > t.le and t1.le < t0.le
           and t1.ri > t0.ri and t1.ri < t.ri )


...
Рейтинг: 0 / 0
Найти непосредств.родителя в табл. вложенных множеств
    #32040288
Alex_Jou
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да-да вот сам и придумал: :-)

SELECT TOP 1 e.name AS name,
b.name AS name_prnt,
b.id AS id,
e.id AS id_prnt
FROM tbl AS b, tbl AS e
WHERE b.lft<=e.lft AND e.lft<=b.rgt
AND b.lft<=e.rgt AND e.rgt<=b.rgt
AND e.id<>b.id
AND e.id = 3 -- Id узла, для которого ищем
-- непосредственного начальника
ORDER BY b.rgt - b.lft
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Найти непосредств.родителя в табл. вложенных множеств
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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