UNION查询:以意外格式收到预期结果

时间:2013-09-17 18:20:25

标签: sql vba ms-access ms-access-2007 union

所以这是我第一次与工会合作,我正在尝试查询3个表。

摘要

我正在尝试从3个不同的表(每个表的一个字段)中选择3个具有相同ID的字段。

我希望每组记录都包含3个字段的结果,然后我可以使用3个结果。似乎正在发生的是它获取所有结果并为每个

创建记录集

任何指导都会非常感激,因为我知道,我可能会以完全错误的方式解决这个问题。

以下是我正在使用的代码

Dim rs1 As DAO.Recordset
Dim unionquery As String

    unionquery = "select 
                    [Test Script] from TEST_SCRIPTS where TEST_ID= " & Me.TEST_ID & " 
                  union select 
                    PROC_ID from PROC_CHECK where TEST_ID= " & Me.TEST_ID  & " 
                  union select all 
                    [Software Version] from SOFTWARE_VERSION where TEST_ID= " &  
                    Me.TEST_ID & " "

    Set rs1 = CurrentDb.OpenRecordset(unionquery, dbOpenForwardOnly)

    If Not (rs1.EOF And rs1.BOF) Then

        Do Until rs1.EOF = True

        ' I THOUGHT THIS WOULD WORK BUT I GET AN ERROR SAYING rs1!PROC_ID AND
        ' rs1![Software Version] are not part of the recordset

        ' WHEN I ALERT OUT rs1![Test Script] i get the whole set
        MsgBox " " & rs1![Test Script] & ", " & rs1!PROC_ID & ", " 
                   & rs1![Software Version] & " "

        Loop

   End If

   rs1.Close
   Set rs1 = Nothing

2 个答案:

答案 0 :(得分:1)

将其添加到OpenRecordset行之前的代码中:

Debug.Print unionquery 

然后您可以运行代码,转到立即窗口( Ctrl + g ),并复制联合查询的文本。然后在查询设计器中创建一个新查询,切换到SQL视图,粘贴文本,然后运行查询。

这项工作将允许您查看查询返回的字段...您会立即注意到名为PROC_ID[Software Version]的字段未包含在该记录集中。我想你会看到一个名为[Test Script]的字段,但请自行检查。

您的第一个业务订单必须是修改查询,以便它返回您想要的信息。在查询设计器中使用该查询后,修改您的VBA代码以使用该查询的SQL。

答案 1 :(得分:1)

“UNION”子句追加行而不是列。因此,生成的记录集只有一个名为[Test Script]的列,其中填充了来自

的过滤值
a: TEST_SCRIPTS where TEST_ID= " & Me.TEST_ID
b: PROC_CHECK where TEST_ID= " & Me.TEST_ID
c: SOFTWARE_VERSION where TEST_ID= " &  Me.TEST_ID 

你可能想要这样的查询

select [Test Script] , [PROC_ID] , [Software Version] FROM (TEST_SCRIPTS INNER JOIN 
PROC_CHECK ON TEST_SCRIPTS.TEST_ID = PROC_CHECK.TEST_ID) INNER JOIN AS SOFTWRE_VERSION     ON 
TEST_SCRIPTS.TEST_ID = SOFTWRE_VERSION.TEST_ID;

所以你可以得到(如果TEST_ID在表中是唯一的)一行和访问字段,如你在rs1中输入的那样![Test Script]& “,”& rs1!PROC_ID& “,”& rs1![软件版本]& “”