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');

各ルートのすべての子をルート ID とともに返す T-SQL ステートメントを作成したいと考えています。あれは、

[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 に答える