首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从多个表中选择字段的联合

从多个表中选择字段的联合
EN

Stack Overflow用户
提问于 2014-12-12 18:59:57
回答 1查看 757关注 0票数 1

我需要创建多个涉及某种UNION的查询。我唯一能弄清楚的办法是在下面。有什么方法可以简化这个过程吗?这样我就不需要为每张桌子建立单独的工会了吗?(我有大约50个表,不想每个表都这样做)--使用Access db

选择Header1,Header2,header 3,header 4

来自score_ADACOMPT

友联市

选择Header1,Header2,header 3,header 4

来自score_ADADESG

友联市

选择Header1,Header2,header 3,header 4

来自Score_API

友联市

选择Header1,Header2,header 3,header 4

来自score_COMPCAC

友联市

选择Header1,Header2,header 3,header 4

来自Score_CRV

友联市

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-12 19:43:38

我认为用这种方法你会遇到一些障碍。我从未在上面找到过正式文档,但Access一次只能处理这么多UNION操作。这似乎取决于操作和查询的复杂程度。您可以尝试编写VBA来创建UNION查询语法,并查看Access是否能够处理它。如果是的话,那就认为自己是幸运的。

或者,您可以考虑创建一个表来保存这些值,并运行append查询将数据加载到该表中。这有优缺点,取决于应用程序环境,以及您计划在数据组合后对其做什么。

通过DAO TableDefs循环并创建联合查询的示例:

代码语言:javascript
复制
Public Sub TestIt()

    BuildUNIONQuery "UNIONTest"
End Sub

Public Sub BuildUNIONQuery(saveQueryName As String)
'builds a large union query for queries starting with "score_" and contains fields:  Header1, Header2, header 3, header 4

    Dim qryStr As String
    Dim tDef As DAO.TableDef
    Dim qDef As DAO.QueryDef
    Dim db As DAO.Database

    Set db = Access.CurrentDb
    qryStr = ""

    For Each tDef In db.TableDefs

        If tDef.Name Like "score_*" Then

            qryStr = qryStr & "SELECT [Header 1], [Header 2], [header 3], [header 4] "
            qryStr = qryStr & "FROM [" & tDef.Name & "] "
            qryStr = qryStr & "UNION "

        End If
    Next tDef

    'remove last UNION from string
    If Len(qryStr) > 0 Then
        qryStr = Left(qryStr, Len(qryStr) - 6)
    End If

    If QueryExists(saveQueryName) Then 'query exits update SQL for current item

        Set qDef = db.QueryDefs(saveQueryName)

        qDef.SQL = qryStr
        db.QueryDefs.Refresh

    Else

        Set qDef = db.CreateQueryDef(saveQueryName, qryStr)

        db.QueryDefs.Refresh
    End If
End Sub

Public Function QueryExists(qName As String) As Boolean
'determine if query name already exists in the database

    Dim qDef As DAO.QueryDef
    Dim db As DAO.Database

    Set db = Access.CurrentDb
    QueryExists = False

    For Each qDef In db.QueryDefs
        If qDef.Name = qName Then
            QueryExists = True
            Exit Function
        End If
    Next qDef

端函数

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

https://stackoverflow.com/questions/27450331

复制
相关文章

相似问题

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