繁体   English   中英

如何在 Excel VBA 中嵌套查询

[英]How do I nest queries in Excel VBA

我不确定是否可能,但我正在尝试嵌套查询。 首先,我创建以下 2 个查询:

MyQuery = "Select * from " & "T1"
MyQuery2 = "Select * from " & "T2" 

然后我想比较两个查询并通过以下方式返回差异:

mkQry = "SELECT (" & MyQuery & ").*" _
                & "FROM (" & MyQuery & ") LEFT JOIN (" & MyQuery2 & ") ON " _
                & "(" & MyQuery & ".F1) = " & MyQuery2 & ".F1) AND " _
                & "(" & MyQuery & ".F2 =  " & MyQuery2 & ".F2) AND " _
                & "(" & MyQuery & ".F3 =  " & MyQuery2 & ".F3) AND " _
                & "(" & MyQuery & ".F4 =  " & MyQuery2 & ".F4) AND " _
                & "(" & MyQuery & ".F5 =  " & MyQuery2 & ".F5)" _
                & "WHERE (((" & MyQuery2 & ".F5) Is Null))"
                
        Set MyRecordset99 = MyConnection2.Execute(mkQry)
        Worksheets("TST").Range("A1").CopyFromRecordset MyRecordset99

但是, mkQry包含一个syntax error ,我不确定如何解决这个问题。

我的问题是:
是否可以按照我尝试做的方式或多或少地嵌套查询,如果可以,我如何更新语法以使其工作。

您应该为每个子查询取别名,然后在整个过程中使用别名。

mkQry = "SELECT x.* " _
                & "FROM (" & MyQuery & ") x LEFT JOIN (" & MyQuery2 & ") y ON " _
                & "(x.F1 = y.F1) AND " _
                ...
                & "(x.F5 = y.F5) " _
                & "WHERE (((y.F5) Is Null))"

您可以使用以下语法执行嵌套查询:

Select * from T1 Where Field01 In (Select Field02 from T2)

如果你想比较两个查询的结果,你可以这样做:

select T1.FieldList, T2.FieldList from T1 FULL OUTER JOIN T2 On T1.Field01 = T2.Field01

then (T1.Field01 is Null) and (T2.Field01 Not is null) ==> T2中存在但T1中不存在的所有记录

and (T1.Field01 Not is Null) and (T2.Field01 is null) ==> T1中存在但T2中不存在的所有记录

and (T1.Field01 Not is Null) and (T2.Field01 Not is null) ==> 两者都存在的所有记录

我希望它能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM