如何在VBA Excel中使用sql FULL OUTER JOIN查询

时间:2017-10-30 11:17:27

标签: vba excel-vba adodb excel

我想通过VBA excel使用 FULL OUTER JOIN sql查询.Below是我的代码和表格。请指导我如何使用它。

第一张表 -

enter image description here

第二张表 -

enter image description here

VBA代码: -

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

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

enter image description here

3 个答案:

答案 0 :(得分:1)

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

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$col1的{​​{1}}中选择两列。你可以自由选择你想要的任何列,但我会建议你不要使用col2,因为它通常会让你的代码在某些时候容易破坏。相反,只需选择您想要的列。

答案 1 :(得分:0)

查询#1:

failedMessage

enter image description here

查询#2:

strSQL = "SELECT a.* ,b.*  FROM [Sheet2$] as a LEFT JOIN [Sheet3$] as b ON a.[Sr]=b.[Sr]" 

enter image description here

答案 2 :(得分:0)

ADODB不支持FULL OUTER JOIN,但表A OUTER JOIN表B相当于TableA LEFT JOIN TableB UNION TableB如果删除重复项,则表示左连接表A.所以

选择DISTINCT * From(从TableA选择col1 LEFT Join TableB ON TableA.sr = TableB.sr Union select col1 from TableB Left Join Table A ON TableB.sr = TableA.sr)

将模仿完整的外部