gpt4 book ai didi

sql - 使用 SQL 定位所有可达节点

转载 作者:行者123 更新时间:2023-12-04 23:09:41 25 4
gpt4 key购买 nike

假设一个表有两列:From 和 To。例子:

From To
1 2
2 3
2 4
4 5

我想知道使用 SQL 查询定位可从节点访问的所有节点的最有效方法。示例:给定 1 它将返回 2,3,4 和 5。可以使用由 UNION 子句联合的多个查询,但它会限制可以达到的级别数。也许不同的数据结构会使问题更容易处理,但这是可用的。

我正在使用 Firebird,但我想要一个仅使用标准 SQL 的解决方案。

最佳答案

您可以使用 recursive common table expression如果您使用大多数品牌的数据库——除了 MySQL 和 SQLite 以及其他一些晦涩的数据库(抱歉,我确实认为 Firebird 晦涩)。此语法是 ANSI SQL 标准,但 Firebird 尚不支持。

更正:Firebird 2.1 确实支持递归 CTE,正如@Hugues Van Landeghem 评论的那样。

否则请参阅我的演示文稿 Models for Hierarchical Data with SQL对于几种不同的方法。

例如,您可以为树中的每个路径存储额外的行,而不仅仅是直接的父/子路径。我称这个设计为Closure Table。

From To   Length
1 1 0
1 2 1
1 3 2
1 4 2
1 5 3
2 2 0
2 3 1
2 4 1
3 3 0
4 4 0
4 5 1
5 5 0

现在您可以查询 SELECT * FROM MyTable WHERE From = 1并获取该节点的所有后代。

PS:我会避免命名列 From ,因为这是一个 SQL 保留字。

关于sql - 使用 SQL 定位所有可达节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3754899/

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