• Excel数据库中FullJion功能的实现


    一、数据库中记录串联常用的方法

    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

  • 相关阅读:
    【STL】set/multiset容器
    Python 爬虫实战
    基于stm32单片机体重秤电子秤超重提醒
    JuiceFS分布式文件系统源码分析(Java层)
    【计算机网络】网络层:路由器的构成
    网络管理中TRUNK的作用和使用
    【期末考试】面向对象程序设计期末预习大纲
    mysql视图中转换表字段的数据类型
    从 0 开始编译 Android 系统源码
    【2022-8-25奇安信算法笔试】偏机器相关
  • 原文地址:https://blog.csdn.net/aaron19822007/article/details/126394422