表1有一個項目列表。 表2列出了這些項目可以關聯的組。 表3是1和2之間的交叉參考。使用T-SQL過濾分層數據的最佳方法?
表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篩選Table3選擇。
從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不在譜系中的所有組。
- 我將如何應用它來過濾交叉引用table1中的結果。