首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中选择父亲的所有家谱,而不带或不带

在SQL中选择父亲的所有家谱,而不带或不带
EN

Stack Overflow用户
提问于 2015-08-07 15:10:45
回答 3查看 401关注 0票数 1

是否有可能选择没有递归系统的父级的所有子类(如WITH或WITH)?

结构如下:

代码语言:javascript
复制
Father  Child

NULL    1
1       2
1       3
2       4
3       5
4       6
6       7

我想要“孩子”(所有的家谱,孩子的孩子等等)所以我想:

4、6、7

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-07 15:35:35

是。每个递归函数都有一个非递归解决方案:

Can every recursion be converted into iteration?

其他一些可能有帮助的资源:

rs123/removal-of-recursion

http://www.refactoring.com/catalog/replaceRecursionWithIteration.html

票数 2
EN

Stack Overflow用户

发布于 2015-08-07 15:18:30

如果您确切地知道您想要达到的深度,那么当然,您不必使用递归。例如,要查找给定父级的第一级后代,只需执行以下操作:

代码语言:javascript
复制
select Child
from MyTable
where Father = 2

即使您想要多个级别(孙辈、祖父母等),只要知道您需要多少级别的,您就不需要严格地递归,只需嵌套多个内联视图,如下所示:

代码语言:javascript
复制
select t1.Child
from MyTable t1
where t1.Father = 2
or t1.Father in (
    select t2.Child
    from MyTable t2
    where t2.Father = 2
)

(这会得到孩子和孙子)

然而,每当你不知道你想去多少层树(例如所有的后代),递归通常是首选的,有时也是唯一的追索权(双关意)。

票数 2
EN

Stack Overflow用户

发布于 2015-09-15 07:35:54

这里我自己的方法是每代执行一次查询。

所以你可以从孩子的身份开始。对于第一代,选择其子女具有给定身份的所有人员。对于第二代,选择其子女在第一代中具有身份证的所有人员。诸若此类。

与递归查找每个人的父母相比,这大大减少了查询的数量,而且在我在sqlite上运行的测试中,对于22代的家谱来说,查询非常快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31881108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档