Plsql 不知道如何解决可能无限的循环(树)

Plsql 不知道如何解决可能无限的循环(树),plsql,plsqldeveloper,Plsql,Plsqldeveloper,我有个问题。 我有一个元素和另一个元素列表,它们以某种方式连接到第一个元素。 我想检查一下,列表中的哪些元素是第一个元素的子元素。将结果保存在数组中。然后我会挑选第一个孩子,寻找他的孩子。保存那个等等等等。 问题是,我不知道确切的关系数。所以我可以有很多循环和搜索。 我是否需要对每个循环和数组进行编程(保存到),还是有更好的方法 编辑: 我在谈论数据库表。我有两张桌子。我想检查表1中每个元素的子元素(表2中的数据)。所以我从表1中的一个循环开始。表1和表2中的元素与坐标xy相连。因此,我正在搜索

我有个问题。 我有一个元素和另一个元素列表,它们以某种方式连接到第一个元素。 我想检查一下,列表中的哪些元素是第一个元素的子元素。将结果保存在数组中。然后我会挑选第一个孩子,寻找他的孩子。保存那个等等等等。 问题是,我不知道确切的关系数。所以我可以有很多循环和搜索。 我是否需要对每个循环和数组进行编程(保存到),还是有更好的方法

编辑: 我在谈论数据库表。我有两张桌子。我想检查表1中每个元素的子元素(表2中的数据)。所以我从表1中的一个循环开始。表1和表2中的元素与坐标xy相连。因此,我正在搜索表2中的所有元素,其中表1_element1.xy==表2.xy。结果可能会有n个孩子。现在我想保存它们,并为这些孩子开始一个新的循环,根据坐标为每个孩子找到他的孩子。保存新结果,以此类推。 更清楚


谢谢。

借助递归,这个问题很容易解决

在这种情况下,终止条件是当列表中的任何节点都没有任何关系时,或者当您到达存储子节点的列表末尾时


谢谢

虽然这个问题有点含糊不清,但比起编写每个单独的循环,更优雅的编写方法是通过递归。当你发现一个没有关系的孩子(如果我理解正确的话)时,你会设置你的休息条件

至于存储问题,听起来您可能希望使用某种形式的拓扑数据结构,其中每个节点都将包含通过关系连接到它的所有节点的列表


希望这有帮助。

您的输入不清楚,输出不清楚。用某种方式替换你的输入数据……你把它标记为java、C++和PL/SQL。我怀疑您并没有真正使用三种过程语言来解决这个问题。请编辑帖子,按照@opi的要求进行改进,并删除不适用的标签。谢谢。你可以用SQL来做这件事。查看“分层查询”-通常数据在一个表中,并且有一个父列。但也许您可以在两个表上创建一个视图,然后使用HQ一次获取所有数据。好的。对于不习惯编程的人。什么是递归及其工作原理。在某种伪代码中,递归可能是这样的:
void doStuff(T source){T childs[]=source.getChilds();for(child:childs){doStuff(child);}}
事实上,您只需使用相同的代码,直到用完child(沿着整个树)。你能解释一下我的递归是如何工作的吗?我不会重复一个答案,我会给你指出一个已经存在并且可能比我解释的更好的答案。还有什么问题,请告诉我。