表1有一个项目列表。
表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
我希望能够从表1中按表3筛选。
从表1中选择项,其中Table3.ParentKey不是“2”
或者它的任何后代
.
从另一个岗位
here on stack
overflow
我已经能够使用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中的筛选结果。