从引用自身的SQL数据库表中累积值

从引用自身的SQL数据库表中累积值,sql,recursion,relationship,Sql,Recursion,Relationship,任务 我目前正在尝试为一个简单的工作成本计算应用程序设计一个可行的结构。我决定创建一个表来容纳所有操作,然后通过ParentID字段将操作链接在一起。下表为该表的简化结构: 如您所见,主键是一个整数字段,它会自动递增以保持其唯一性。任何源于另一个操作的操作都将在父ID字段下创建一个简单的工作流程分解。在这个数据表上还有一个成本字段,这是我最感兴趣的字段 问题 我想运行一个查询,在那里我可以输入一个操作ID,它将递归地运行该操作及其所有子项和子项的子项等。这将在它检索的记录中累积所有成本字段。我能

任务

我目前正在尝试为一个简单的工作成本计算应用程序设计一个可行的结构。我决定创建一个表来容纳所有操作,然后通过ParentID字段将操作链接在一起。下表为该表的简化结构:

如您所见,主键是一个整数字段,它会自动递增以保持其唯一性。任何源于另一个操作的操作都将在父ID字段下创建一个简单的工作流程分解。在这个数据表上还有一个成本字段,这是我最感兴趣的字段

问题

我想运行一个查询,在那里我可以输入一个操作ID,它将递归地运行该操作及其所有子项和子项的子项等。这将在它检索的记录中累积所有成本字段。我能想到的唯一方法是通过递归循环,我认为这不是最好的方法

问题


所以,我的问题是,有没有一种不用递归循环就能做到这一点的方法?如果没有,有人能建议使用循环的最干净、最快捷的方法吗?

根据定义,这种查询是递归的。使用该表结构无法获取该信息

您可以创建另一个表,在其中存储所有层次结构信息。在插入操作时,您必须递归地添加父级、祖父母、祖父-祖父-祖父-祖父-祖父,这也可能不是一个好主意,因为表将非常快速地增长。不过,这会使查询更简单


还有一个附带说明:我建议将ParentID命名为ParentOperationID。ParentID太笼统了。

谢谢您的建议,但我仍想探索查询路线以及其中涉及的内容,因为您建议的选项在插入记录方面仍然存在问题。再加上未来的复制和粘贴操作功能将变得更加困难。@Weebie没问题。我没有证据,但我认为对于这种层次结构,非递归版本是不可能的。