【发布时间】:2017-10-05 23:38:22
【问题描述】:
我正在尝试在 SQL Server 中编写一个递归查询,该查询基本上列出了给定父级的父子层次结构。一个父母可以有多个孩子,一个孩子可以属于多个父母,因此它以多对多的关系存储。
我从另一个有点相关的问题修改了以下查询,但这并没有一直到树,只选择第一级子...
DECLARE @ObjectId uniqueidentifier
SET @ObjectId = '1A213431-F83D-49E3-B5E2-42AA6EB419F1';
WITH Tree AS
(
SELECT A.*
FROM Objects_In_Objects A
WHERE A.ParentObjectId = @ObjectId
UNION ALL
SELECT B.*
FROM Tree A
JOIN Objects_In_Objects B
ON A.ParentObjectId = B.ObjectId
)
SELECT *
FROM Tree
INNER JOIN Objects ar on tree.ObjectId = ar.ObjectId
有谁知道如何修改查询以一直沿“树”向下移动?或者使用上面的结构是不可能的?
对象
列:ObjectId | Name
Objects_In_Objects
列:ObjectId | ParentObjectId
样本数据:
对象
ObjectId | Name
1A213431-F83D-49E3-B5E2-42AA6EB419F1 | Main container
63BD908B-54B7-4D62-BE13-B888277B7365 | Sub container
71526E15-F713-4F03-B707-3F5529D6B25E | Sub container 2
ADA9A487-7256-46AD-8574-0CE9475315E4 | Object in multiple containers
对象中的对象
ObjectId | ParentObjectId
ADA9A487-7256-46AD-8574-0CE9475315E4 | 71526E15-F713-4F03-B707-3F5529D6B25E
ADA9A487-7256-46AD-8574-0CE9475315E4 | 63BD908B-54B7-4D62-BE13-B888277B7365
63BD908B-54B7-4D62-BE13-B888277B7365 | 1A213431-F83D-49E3-B5E2-42AA6EB419F1
71526E15-F713-4F03-B707-3F5529D6B25E | 1A213431-F83D-49E3-B5E2-42AA6EB419F1
【问题讨论】:
标签: sql sql-server many-to-many hierarchical-data