【发布时间】:2009-07-01 16:37:29
【问题描述】:
Table1 有一个项目列表。 表 2 有一个项目可以关联的组列表。 表 3 是 1 和 2 之间的交叉引用。
表 2 中的组以分层方式设置。
Key ParentKey Name
1 NULL TopGroup1
2 NULL TopGroup2
3 1 MiddleGroup1
4 2 MiddleGroup2
5 3 NextGroup1
6 4 NextGroup1
7 2 MiddleGroup3
我希望能够从由 Table3 过滤的 Table1 中进行选择。
从 Table1 中选择 Table3.ParentKey 不是“2”或其任何后代的项目。
从另一个帖子here on stackoverflow 我已经能够使用 CTE 来识别层次结构。
WITH Parent AS
(
SELECT
table2.Key,
cast(table2.Key as varchar(128)) AS Path
FROM
table2
WHERE
table2.ParentKey IS NULL
UNION ALL
SELECT
TH.Key,
CONVERT(varchar(128), Parent.Path + ',' + CONVERT(varchar(128),TH.Key)) AS Path
FROM
table2 TH
INNER JOIN
Parent
ON
Parent.Key = TH.ParentKey
)
SELECT * FROM Parent
我想这真的是一个两部分的问题。
- 如何过滤上述内容?例如,返回 TopGroup1 不在谱系中的所有组。
- 如何将其应用于交叉引用表 1 中的过滤结果。
【问题讨论】: