我想通过VBA excel使用 FULL OUTER JOIN sql查询.Below是我的代码和表格。请指导我如何使用它。
第一张表 -
第二张表 -
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
在上面的代码中,我遇到了错误。
答案 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
查询#2:
strSQL = "SELECT a.* ,b.* FROM [Sheet2$] as a LEFT JOIN [Sheet3$] as b ON a.[Sr]=b.[Sr]"
答案 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)
将模仿完整的外部