当前位置: 首页 > 面试题库 >

具有多个级别的MS-Access SQL自连接

子车心思
2023-03-14
问题内容

我有一个表“ People”,主键为“ PersonID”,字段为“ Supervisor”。“ Supervisor”字段包含用于创建自我联接的“
PersonID”的外键。

我想创建一个sql查询,以返回所有以“
Me”(登录到数据库的PersonID)作为管理员的人,以及该列表上有人标记为管理员的任何人。本质上,我想在命令链中列出提供的PersonID下面的任何人。


问题答案:

考虑以下功能集:

Function BuildQuerySQL(lngsid As Long) As String
    Dim intlvl As Integer
    Dim strsel As String: strsel = selsql(intlvl)
    Dim strfrm As String: strfrm = "people as p0 "
    Dim strwhr As String: strwhr = "where p0.supervisor = " & lngsid

    While HasRecordsP(strsel & strfrm & strwhr)
        intlvl = intlvl + 1
        BuildQuerySQL = BuildQuerySQL & " union " & strsel & strfrm & strwhr
        strsel = selsql(intlvl)
        If intlvl > 1 Then
            strfrm = "(" & strfrm & ")" & frmsql(intlvl)
        Else
            strfrm = strfrm & frmsql(intlvl)
        End If
    Wend
    BuildQuerySQL = Mid(BuildQuerySQL, 8)
End Function

Function HasRecordsP(strSQL As String) As Boolean
    Dim dbs As DAO.Database
    Set dbs = CurrentDb
    With dbs.OpenRecordset(strSQL)
        HasRecordsP = Not .EOF
        .Close
    End With
    Set dbs = Nothing
End Function

Function selsql(intlvl As Integer) As String
    selsql = "select p" & intlvl & ".personid from "
End Function

Function frmsql(intlvl As Integer) As String
    frmsql = " inner join people as p" & intlvl & " on p" & intlvl - 1 & ".personid = p" & intlvl & ".supervisor "
End Function

在这里,BuildQuerySQL可以为函数提供与PersonID对应的,Supervisor并且函数将为适当的查询返回“递归”
SQL代码,以获得PersonID主管的所有下属的。

因此,可以评估该函数以构造保存的查询,例如,对于具有的主管PersonID = 5,创建名为的查询Subordinates

Sub test()
    CurrentDb.CreateQueryDef "Subordinates", BuildQuerySQL(5)
End Sub

或者根据您的应用程序的要求,对SQL进行评估以打开结果的RecordSet。

请注意,该函数构造一个UNION查询,嵌套的每个级别都与前一个查询结合在一起。



 类似资料:
  • 我有一个有两个阶段的Dockerfile;第一阶段从源代码构建一个react应用程序,第二阶段复制构建并添加一个NGINX服务器: 我也在使用gitlab-ci,我希望有多个阶段:构建、测试和部署。但是我不知道如何将构建和测试阶段分开,因为我使用的是多阶段的DockerFile。问题是所有的JS测试(对于React)都需要在“Yarn build”执行之前运行,并且build被复制到seconds

  • 问题内容: 我正在尝试创建简单的需求管理数据库。基本上我有2张桌子,如下所示: 具有2列的Contract_requirements: SW_requirements 我想编写查询来接收这样的表: 表“合同要求”和“软件要求”通过“ RootReq”列关联 香港专业教育学院试图实现艾伦·布朗的代码 http://allenbrowne.com/func- concat.html#Top 这是我的查

  • 问题内容: 我使用Python Requests库下载一个大文件,例如: 大文件的下载速度为每秒+-30 Kb,这有点慢。与bigfile服务器的每个连接都受到限制,因此我想建立多个连接。 有没有一种方法可以同时建立多个连接来下载一个文件? 问题答案: 您可以使用HTTP标头仅获取文件的一部分(此处已涵盖python)。 只需启动几个线程,并获取每个线程的不同范围,就可以完成;) 还要注意,并非每

  • 问题内容: 我有以下收藏 场地集合 评论集 评论集 作者集 现在我下面的填充查询工作正常 但是我想通过查询来实现它,但是当我对评论进行“ $ unwind”操作时,它会分割场地…我希望评论以相同的数组(例如填充)和相同的顺序… 我想实现以下查询,因为作者具有followers字段,所以我需要通过发送来发送字段,而使用… 问题答案: 当然有两种方法,具体取决于您可用的MongoDB版本。从到的不同用

  • 我是spring boot新手,需要关于具有多个内部连接的自定义JPA查询的帮助。基本上,我需要将以下SQL查询转换为JPA查询: 下面是代码结构: 公司实体 软件库 认证计数信号I mpl

  • 嗨,我想下载一个多java的文件。网套接字。我可以通过基本的get请求获取文件: 这是完美的,但还不够,因为我希望使用多套接字。我可以通过请求HEAD获得头,这样我就可以只获得内容长度。现在我的计划是使用此代码创建线程。例如,如果我想下载一个有3个线程的文件;我将把内容长度除以3,然后用3个线程下载。(0-99) (100-199) (200-299) = 300300字节,然后我会加入部分,但我