0

我们有一个这样的树结构表:

Id  Desc  ParentID
===
A    DescrA   NULL
B    DescrB   A
C    DescrC   A
D    DescrD   C
E    DescrE   C
F    DescrF   E

我们需要一个返回特定 ID 的后代(包括子后代)数量的查询,例如:

select count(descendants) from Tablex where id='A' --result = 5
select count(descendants) from Tablex where id='B' --result = 0
select count(descendants) from Tablex where id='C' --result = 3
select count(descendants) from Tablex where id='E' --result = 1

我们已经看到使用 CTE 可以“轻松”制作它,但无法理解它的要点......

4

1 回答 1

2
declare @T table
(
  Id char(1),
  ParentId char(1)
);

insert into @T values
('A', NULL),
('B', 'A'),
('C', 'A'),
('D', 'C'),
('E', 'C'),
('F', 'E');

declare @ParentId char(1);
set @ParentId = 'A';

with C as
(
  select Id, ParentId
  from @T
  where ParentId = @ParentId
  union all
  select T.Id, T.ParentId
  from @T as T
    inner join C
      on T.ParentId = C.Id
)
select count(*)
from C;
于 2012-06-14T08:13:13.537 回答