首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在VBA Excel中使用sql完全外连接查询

如何在VBA Excel中使用sql完全外连接查询
EN

Stack Overflow用户
提问于 2017-10-30 19:17:27
回答 3查看 5.6K关注 0票数 2

我想用VBA JOIN查询excel.Below是我的代码和表。请指导我如何使用相同的。

第一表-

第二表-

VBA代码:-

代码语言:javascript
复制
Sub SQL()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

strSQL = "SELECT * FROM [Sheet3$] FULL OUTER JOIN [Sheet2$] ON [Sheet2$].[Sr]=[Sheet3$].[Sr]"
rs.Open strSQL, cn

Sheet5.Range("D1").CopyFromRecordset rs

End Sub

在上面的代码中,我得到了下面的错误。

EN

回答 3

Stack Overflow用户

发布于 2017-10-30 19:22:57

我不确定您当前的错误实际上是由查询引起的。但MS Access不支持FULL OUTER JOIN。但是,您可以使用包含两个查询的UNION来模拟它:

代码语言:javascript
复制
SELECT s1.col1, s1.col2
FROM [Sheet3$] s1
LEFT JOIN [Sheet2$] s2
    ON s1.[Sr] = s2.[Sr]
UNION ALL
SELECT s2.col1, s2.col2
FROM [Sheet2$] s1
LEFT JOIN [Sheet3$] s2
    ON s1.[Sr] = s2.[Sr]

我随意地从Sheet3$中选择了两列,分别称为col1col2。您可以自由地选择所需的任何列,但我建议您不要使用SELECT *,因为它通常会使您的代码在以后的某个时刻容易崩溃。相反,只需选择您显式需要的列。

票数 1
EN

Stack Overflow用户

发布于 2017-10-30 19:36:32

查询#1:

代码语言:javascript
复制
strSQL = "SELECT a.* ,b.*  FROM [Sheet2$] as a LEFT JOIN [Sheet3$] as b ON a.[Sr]=b.[Sr]" 

查询#2:

代码语言:javascript
复制
strSQL = "SELECT a.* ,b.Family  FROM [Sheet2$] as a LEFT JOIN [Sheet3$] as b ON a.[Sr]=b.[Sr]"

票数 0
EN

Stack Overflow用户

发布于 2017-10-30 21:14:47

ADODB不支持完全外连接,但是如果去掉重复项,表A的外连接表B等同于TableA LEFT JOIN TableB UNION TableB Left JOIN表A。所以

select DISTINCT * from (select col1 From TableA LEFT Join TableB ON TableA.sr = TableB.sr Union Select col1 from TableB Left Join表A ON TableB.sr = TableA.sr)

将模仿一个完整的外部

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

https://stackoverflow.com/questions/47013940

复制
相关文章

相似问题

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