首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以在Access中创建递归查询?

是否可以在Access中创建递归查询?
EN

Stack Overflow用户
提问于 2009-04-18 06:24:06
回答 5查看 33.8K关注 0票数 19

我有一张job桌子

代码语言:javascript
复制
Id
ParentID
jobName
jobStatus

根ParentID为0。

在Access中是否可以创建一个查询来查找给定job的根目录?数据库是没有链接表的MDB。Access版本为2003。一个job可以是几个级别的子孙。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-04-18 06:36:18

SServer 2005之后的SQL Server支持递归查询,但Access不支持递归查询。

如果你事先知道层数,你可以写一个查询,但它不会是一个递归查询。

在SQL Server中,CTE (一种SQL扩展)用于此目的:请参阅http://blog.crowe.co.nz/archive/2007/09/06/Microsoft-SQL-Server-2005---CTE-Example-of-a-simple.aspx

但是,常规SQL不支持递归性。

票数 9
EN

Stack Overflow用户

发布于 2010-04-24 02:36:09

在Access中可以创建一个查询来查找给定作业的根目录。不要忘记VBA函数的强大功能。可以在VBA模块中创建递归函数,并将其结果用作查询中的输出字段。

示例:

代码语言:javascript
复制
Public Function JobRoot(Id As Long, ParentId As Long) As Long
   If ParentId = 0 Then
      JobRoot = Id
      Exit Function
   End If

   Dim Rst As New ADODB.Recordset
   Dim sql As String
   sql = "SELECT Id, ParentID FROM JobTable WHERE Id = " & ParentId & ";"
   Rst.Open sql, CurrentProject.Connection, adOpenKeyset, adLockReadOnly

   If Rst.Fields("ParentID") = 0 Then
      JobRoot = Rst.Fields("Id")
   Else
      JobRoot = JobRoot(Id, Rst.Fields("ParentID"))    ' Recursive.
   End If

   Rst.Close
   Set Rst = Nothing
End Function

通过使用查询生成器或只需在查询字段中键入带参数的函数名,即可从查询中调用此递归函数。

它将生成根。

(我认识到OP现在已经存在一年了,但当每个人都说什么是不可能的事情都是可能的时候,我不得不回答)。

票数 30
EN

Stack Overflow用户

发布于 2009-04-18 08:24:40

你不能递归查询。

你可以做一些任意数量的左连接,但是你只能和你的连接一样多的层级。

或者,您可以使用Celko's "Nested Set Model"检索所有父级。这将需要修改您的表结构,以使插入和更新更加复杂。

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

https://stackoverflow.com/questions/763016

复制
相关文章

相似问题

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