gpt4 book ai didi

sql - 有没有一种方法可以在不递归或循环的情况下在 SQL 中选择父 ID?

转载 作者:行者123 更新时间:2023-12-02 00:22:28 25 4
gpt4 key购买 nike

我有一个包含以下列的表:group_id、parent_id、name

在此表中,parent_id 是另一条记录的 group_id。 parent 与子女之间存在1对N的关系。这形成了一个层次结构,只有一个顶级组的 parent_id 为 NULL。深度可能是任意的,但实际上我的层次结构深度绝不会超过 20 层。

我想检索具有给定 group_id 的组的每个祖先( parent 的 parent 等)。我担心返回的特定方式。

我正在使用 MS SQL 2005,但我也对使用其他 RDBMS 的解决方案感兴趣。

我发现了一些类似的问题,但它们似乎都可以分解为递归、循环或嵌套集。我不能使用嵌套集,因为我不能更改数据结构。我想尽可能避免递归或循环,或者至少理解为什么这是不可能的。

这是我在研究这个问题时发现的一些问题:

How to select parent ids

Sql recursion without recursion

最佳答案

操作本质上是循环的。因为每个节点与其根没有任何有限关系,所以您必须遍历才能发现它。

例如,如果您知道最大深度为 N,那么您可以在单个语句中创建 N 个 LEFT OUTER JOIN 并显示以这种方式返回的最后一个非空父 ID .

循环要求是你根本不知道N是什么,你不能要求像SQL这样的声明式语言来“弄清楚”

即使您可以使用一些内置方法来完成它,它仍然是一个循环或递归,只是对您进行了混淆处理。

关于sql - 有没有一种方法可以在不递归或循环的情况下在 SQL 中选择父 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10324196/

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