gpt4 book ai didi

sql - 使用 T-SQL 过滤分层数据的最佳方法?

转载 作者:搜寻专家 更新时间:2023-10-30 22:22:37 25 4
gpt4 key购买 nike

表 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

我希望能够从经过 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

我想这真的是一个由两部分组成的问题。

  1. 如何过滤以上内容?例如,返回 TopGroup1 不在谱系中的所有组。
  2. 我如何将其应用于交叉引用表 1 中的过滤结果。

最佳答案

关于这个主题有一整本书,请参阅:' Joe Celko's Trees and Hierarchies in SQL for Smarties '

就个人而言,当我不得不解决这个问题时,我使用了一个临时表来展开层次结构,然后从临时表中选择内容。本质上,您可以在单个查询中在临时表中构建另一层,通常层次结构只有 5-10 层深,因此您可以在 5 到 10 个查询中展开它。

关于sql - 使用 T-SQL 过滤分层数据的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1066209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com