在前面合并表格里提到,用union all关键字进行合并数据,union all只是简单的将所有的数据进行复制到一起,不做其他的处理。
如果想合并数据的时候,重复的数据仅保留一条的话,可以使用union关键字,union在合并数据的时候,会将重复的数据删除掉,仅保留一条。
union关键字判断数据是否重复是根据select获取的所有字段进行判断的,也就是必须每一个字段都是一样的情况下才算重复。
只要把前面合并表格里的union all替换为union,就可以把功能改变为合并数据,并且删除重复。
如果仅仅针对一张表想用union删除重复,也是可以的:
代码语言:javascript复制Sub ADOUnion()
Dim AdoConn As Object
Set AdoConn = VBA.CreateObject("ADODB.Connection")
'打开数据库
AdoConn.Open "Provider =Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.fullname & ";Extended Properties=""Excel 12.0;HDR=YES"";"
Dim rst As Object
Set rst = VBA.CreateObject("ADODB.Recordset")
Set rst = AdoConn.Execute("select * from [Sheet1$A1:B11] union select * from [Sheet1$A1:B11]", , 1)
'输出标题
Dim i As Long
For i = 0 To rst.Fields.Count - 1
Range("D1").Offset(0, i).Value = rst.Fields(i).name
Next
'输出数据
Range("D2").CopyFromRecordset rst
rst.Close
AdoConn.Close
Set rst = Nothing
Set AdoConn = Nothing
End Sub
比起用字典等方式来删除重复,显然方便多了。
当然用distinct关键字会更方便。