我有一张job
桌子
Id
ParentID
jobName
jobStatus
根ParentID为0。
在Access中是否可以创建一个查询来查找给定job
的根目录?数据库是没有链接表的MDB。Access版本为2003。一个job
可以是几个级别的子孙。
发布于 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不支持递归性。
发布于 2010-04-24 02:36:09
在Access中可以创建一个查询来查找给定作业的根目录。不要忘记VBA函数的强大功能。可以在VBA模块中创建递归函数,并将其结果用作查询中的输出字段。
示例:
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现在已经存在一年了,但当每个人都说什么是不可能的事情都是可能的时候,我不得不回答)。
发布于 2009-04-18 08:24:40
你不能递归查询。
你可以做一些任意数量的左连接,但是你只能和你的连接一样多的层级。
或者,您可以使用Celko's "Nested Set Model"检索所有父级。这将需要修改您的表结构,以使插入和更新更加复杂。
https://stackoverflow.com/questions/763016
复制相似问题