是否有可能选择没有递归系统的父级的所有子类(如WITH或WITH)?
结构如下:
Father Child
NULL 1
1 2
1 3
2 4
3 5
4 6
6 7我想要“孩子”(所有的家谱,孩子的孩子等等)所以我想:
4、6、7
发布于 2015-08-07 15:35:35
是。每个递归函数都有一个非递归解决方案:
Can every recursion be converted into iteration?
其他一些可能有帮助的资源:
rs123/removal-of-recursion
http://www.refactoring.com/catalog/replaceRecursionWithIteration.html
发布于 2015-08-07 15:18:30
如果您确切地知道您想要达到的深度,那么当然,您不必使用递归。例如,要查找给定父级的第一级后代,只需执行以下操作:
select Child
from MyTable
where Father = 2即使您想要多个级别(孙辈、祖父母等),只要知道您需要多少级别的,您就不需要严格地递归,只需嵌套多个内联视图,如下所示:
select t1.Child
from MyTable t1
where t1.Father = 2
or t1.Father in (
select t2.Child
from MyTable t2
where t2.Father = 2
)(这会得到孩子和孙子)
然而,每当你不知道你想去多少层树(例如所有的后代),递归通常是首选的,有时也是唯一的追索权(双关意)。
发布于 2015-09-15 07:35:54
这里我自己的方法是每代执行一次查询。
所以你可以从孩子的身份开始。对于第一代,选择其子女具有给定身份的所有人员。对于第二代,选择其子女在第一代中具有身份证的所有人员。诸若此类。
与递归查找每个人的父母相比,这大大减少了查询的数量,而且在我在sqlite上运行的测试中,对于22代的家谱来说,查询非常快。
https://stackoverflow.com/questions/31881108
复制相似问题