Получить родителей и бабушек и дедушек конкретного ребенка
У меня есть стол как ниже
имя таблицы: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;