一、数据库中记录串联常用的方法
1、select … from 表1 inner join 表2 on 条件A
将符合条件A的表1与表2的记录中的相关字段进行串联
2、select … from 表1 left join 表2 on 条件A
以表1中的字段为主,将符合条件A的表2中记录的相关字段与表1中的相关记录串联
3、select … from 表1 right join 表2 on 条件A
以表2中的字段为主,将符合条件A的表1中记录的相关字段与表2中的相关记录串联
4、select …from 表1 full join 表2 on条件A
将表1、表2中的相关字段筛选出来,并将符合条件A的表1中的相关字段与表2中的相关字段进行串联
二、问题描述
以上四种记录中字段串联在Access数据库中都可以实现,但是在Excel数据库中只有前三种可以实现,第4种full join在Excel数据库中不支持,哪有没有什么方法在Excel中实现full join功能呢?
三、问题分析
先通过union 将表1和表2中相同字段进行合并,以此记录集作为新的表,然后通过left join(或right join)依次和表1、表2中的其他字段串联,从而实现full join功能。
sheet1:
类别 | 数量 | 金额 | 单价 |
A1 | 1 | 10 | 100 |
A2 | 2 | 20 | 200 |
A3 | 3 | 30 | 300 |
A4 | 4 | 40 | 400 |
A5 | 5 | 50 | 500 |
A6 | 6 | 60 | 600 |
sheet2:
类别 | 数量 | 金额 | 库别 |
A2 | 2 | 20 | 2 |
A3 | 3 | 30 | 4 |
A4 | 4 | 40 | 40 |
A8 | 5 | 50 | 6 |
代码如下:
Sub Excel数据库实现FullJoin功能()
Dim conn As Object
Dim mysql As String
Dim rst As Object
Set conn = VBA.CreateObject("adodb.connection")
mysql = "provider=microsoft.ace.oledb.12.0;extended properties=excel 12.0; data source=E:\学习\vba\数据库\73集\多表查询.xlsx"
conn.Open mysql
Set rst = VBA.CreateObject("adodb.recordset")
mysqlA = "select 类别,数量,金额 from [sheet1$] union select 类别,数量,金额 from [sheet2$]"
mysqlB = "select 表1.*,[sheet1$].单价 from (" & mysqlA & ") as 表1 left join [sheet1$] on 表1.类别=[sheet1$].类别"
mysqlC = "select 表2.*,[sheet2$].库别 from (" & mysqlB & ") as 表2 left join [sheet2$] on 表2.类别=[sheet2$].类别"
mysql = "select * into [FullJoin表] from (" & mysqlC & ")"
rst.Open mysql, conn, 3, 1
conn.Close
Set rst = Nothing
Set conn = Nothing
End Sub
代码执行结果如下(FullJoin表):
数量 | 金额 | 单价 | 库别 | |
A1 | 1 | 10 | 100 |
|
A2 | 2 | 20 | 200 | 2 |
A3 | 3 | 30 | 300 | 4 |
A4 | 4 | 40 | 400 | 40 |
A5 | 5 | 50 | 500 |
|
A6 | 6 | 60 | 600 |
|
A8 | 5 | 50 |
| 6 |