0

我有下表和值:

create table TreeTable (
    ID int primary key,
    ParentID int not null,
    Name varchar(255) not null
)
insert into TreeTable([ID], [ParentID], [Name]) values
    (1, 0, 'rootA'),
    (2, 1, 'rootAchildA'),
    (3, 1, 'rootAchildB'),
    (4, 2, 'rootAchildAchildA'),
    (5, 2, 'rootAchildAchildB'),
    (6, 3, 'rootAchildBchildA'),
    (7, 3, 'rootAchildBchildB');
    (8, 0, 'rootB'),
    (9, 8, 'rootBchildA'),
    (10, 8, 'rootBchildB');

我想编写一个 T-SQL 语句,该语句将返回具有根 ID 的每个根的所有子节点;那是,

[Name]              [RootID]
'rootAchildA'       1
'rootAchildB'       1
'rootAchildAchildA' 1
'rootAchildAchildB' 1
'rootAchildBchildA' 1
'rootAchildBchildB' 1
'rootBchildA'       8
'rootBchildB'       8

树的深度可以任意长。什么语句会返回这个?

4

1 回答 1

0

我故意过度概括了这一点,以便它可能在更多情况下有用。

WITH
  children
AS
(
  SELECT id, ParentID, name FROM treeTable

  UNION ALL

  SELECT
    treeTable.id, children.ParentID, treeTable.Name
  FROM
    children
  INNER JOIN
    treeTable
      ON treeTable.ParentID = children.ID
)
SELECT
  children.name,
  treeTable.ID    AS rootID
FROM
  treeTable
INNER JOIN
  children
    ON children.ParentID = treeTable.ID
WHERE
  treeTable.ParentID = 0
于 2012-06-29T19:42:47.877 回答