Получить родителей и бабушек и дедушек конкретного ребенка

У меня есть стол как ниже

имя таблицы:ExampleTable

ChildID       ChildCommonID   ParentID


1               2                0

2               3                0

3               4                1

4               5                3

5               6                4

Проблема в:

у меня есть пример идентификатора ребенка:ChildID= 5

поэтому мне нужно проверить, есть ли у него родитель или нет, если он содержит родителя, а затем проверить соответствующую парентиду, в этом случае parentID равен 4, поэтому необходимо проверить, есть ли у дочернего элемента 4 родительский элемент, в этом случае parentID дочернего элемента 4 равен 3, таким образом, для проверки выигрыша у дочернего элемента 3 есть родительский элемент, в этом случае у дочернего элемента 3 есть родительский элемент 1, поэтому проверьте, что дочерний элемент 1 имеет здесь родительских элементов. дочерний элемент 1 - это старший родительский элемент, и у него нет родительского элемента, поэтому остановите процесс и верните все дочерние элементы до 1

Здесь ожидаемый результат

ChildID

5
4
3
1

я пробовал что-то вроде ниже, но это не дает правильный вывод

with getallparent as (
   select * 
   from ExampleTable 
   where ChildID  = 5 
  union all 
  select *
   from ExampleTable c 
     Left join getallparent p on p.ChildID = c.ParentID 
) 
select *
from getallparent;

Если вам нужны примеры данных, вы можете использовать следующий запрос

create table ExampleTable(ChildID int,ChildCommonID int ,ParentID int )
insert into ExampleTable values(1,2,0)
insert into ExampleTable values(2,3,0)
insert into ExampleTable values(3,4,1)
insert into ExampleTable values(4,5,3)
insert into ExampleTable values(5,6,4)

Любая помощь будет оценена

1 ответ

Решение

Как и мой комментарий, ваши столбцы были неверны в соединении. использование getallparent p on p.ParentID = c.ChildID,

with getallparent as (
   select ChildID,ParentID
   from ExampleTable 
   where ChildID  = 5 
  union all 
  select C.ChildID,C.ParentID
   from ExampleTable c 
     inner join getallparent p on p.ParentID = c.ChildID 
) 
select *
from getallparent;

скрипка

Другие вопросы по тегам