CN111639091B - 一种基于并表的多表合并方法 - Google Patents

一种基于并表的多表合并方法 Download PDF

Info

Publication number
CN111639091B
CN111639091B CN202010497848.5A CN202010497848A CN111639091B CN 111639091 B CN111639091 B CN 111639091B CN 202010497848 A CN202010497848 A CN 202010497848A CN 111639091 B CN111639091 B CN 111639091B
Authority
CN
China
Prior art keywords
column
columns
merging
value
condition
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010497848.5A
Other languages
English (en)
Other versions
CN111639091A (zh
Inventor
季业
刘阳
王世航
陈明松
刘壮
张豪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong Huimao Electronic Port Co Ltd
Original Assignee
Shandong Huimao Electronic Port Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shandong Huimao Electronic Port Co Ltd filed Critical Shandong Huimao Electronic Port Co Ltd
Priority to CN202010497848.5A priority Critical patent/CN111639091B/zh
Publication of CN111639091A publication Critical patent/CN111639091A/zh
Application granted granted Critical
Publication of CN111639091B publication Critical patent/CN111639091B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/235Update request formulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明特别涉及一种基于并表的多表合并方法。该基于并表的多表合并方法,将多张源表合并,统称源表;新建一列标记列,用于区分更新或是插入;以目标表和源表通过合并条件做左外连接,并在结果后添加到标记列;分析MERGE语句,得出需要更新和插入的列,并为这些列构建表达式;通过表达式计算得出该列应存的值;在执行阶段,逐行进行更新或插入。该基于并表的多表合并方法,匹配条件灵活,操作简便,可以根据不同条件进行个性化合并更新操作,同时为应对合并多张表的情况,提供了基于并表的多表合并方法,极大的提高了数据处理效率,适宜推广应用。

Description

一种基于并表的多表合并方法
技术领域
本发明涉及数据库数据处理技术领域,特别涉及一种基于并表的多表合并方法。
背景技术
利用已有的表单的数据对另一张表进行更新或者插入操作在应用环境中是常见的,也是必要的。使用INSERT INTO(插入)目标表VALUES SELECT(选值)*FROM源表等简单的SQL语句进行操作,所能完成的功能是有限的,无法满足自定义插入数据和更新数据的需求,并且需要投入更多的精力进行SQL语句的键入。
当前与合并更新功能接近的语法是INSERT ON CONFLICT(插入冲突)。其应用范围十分广泛,功能简要概括起来便是存在即更新,不存在则写入。但在某些特定环境下,存在并不一定需要更新,且更新也不一定使用源表中的数据;不存在并不一定需要插入,且插入也不一定使用源表的数据。
例如将各地的订单表汇总更新到全国订单表时,需要对表单进行一系列的排查,不满足条件的订单不需要被加入,而满足一定条件的订单需要被更新,这样的场景就无法使用一句INSERT ON CONFLICT语句进行完成。也就是说,INSERT ON CONFLICT的功能过于简单,在特定环境下无法满足用户个性化定义的需求。
针对当前INSERT ON CONFLICT功能无法满足用户个性化更新合并需求的不足的问题,本发明提出了一种基于并表的多表合并方法。
发明内容
本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于并表的多表合并方法。
本发明是通过如下技术方案实现的:
一种基于并表的多表合并方法,其特征在于:包括以下步骤:
S1.将多张源表合并,统称源表;
S2.新建一列标记列,用于区分更新或是插入;
S3.以目标表和源表通过合并条件做左外连接,并在结果后添加到S2得出的标记列;
S4.分析MERGE语句,得出需要更新和插入的列,并为这些列构建表达式;
S5.通过表达式计算得出该列应存的值;
S6.在执行阶段,逐行进行更新或插入。
所述步骤S1中,通过UNION方法将多张源表合并,要求源表必须具有相同数量的列以及对相同的应列类型;且源表不一定是一张表,也可以是子查询(一条SELECT语句)语句,只要保证多个源表的结构相同即可。
所述步骤S2中,由于新建的标记列需要添加到左外连接后的结果之中,而左外连接后的结果中每一列都要用来计算表达式的值,因此新建的标记列的列ID不能为空,需存放某一列的列ID;若该表存在主键列,则新建的标记列的列ID为主键列的ID,否则则为目标表中第一列不为空的列的列ID。
所述步骤S3中,目标表和源表通过合并条件做左外连接时,先添加源表的所有列,然后添加目标表的所有列,最终添加S2得出的标记列;
所述步骤S3得到的左外连接的结果,称之为左外连接作用域;左外连接作用域中的每一列的指数便为其作用域ID,每一列存放的值为其在所属表中的列ID;
左外连接之后,标记列的值只可为空或者对应列的ID,为空则代表该行在执行阶段应该执行插入操作,为列ID则指明在执行阶段应该对该列进行更新操作。
所述步骤S4中,具体实现流程如下:
第一步,对MERGE语句所包含的信息进行分析,遍历所有WHEN MATCH组,得到每一组WHEN MATCH所要更新的列的列名,然后将这些列名所对应的列ID取一个并集,命名为MATCHCOLLIST;
同理,遍历所有WHEN NOT MATCH组,得到每一组WHEN NOT MATCH所有插入的列的列名,然后将这些列名所对应的列ID取一个并集,命名为NOTMATCHCOLLIST;
第二步,为需要更新或者插入的列构建CASE表达式
CASE表达式由WHENS结构和ELSE结构组成,WHENS结构是WHEN结构的数组;WHEN结构里包含CONDITION和VALUE,其中CONDITION保存该MATCH的额外更新条件,如果无额外更新条件,则CONDITION的值则为ON条件;VALUE表达式中存的是该列即将被更新后的值;
在一个CASE表达式中,WHEN结构体可以有多个,用来保存所有该列符合的条件以及该条件下应当被更新的值;
第三步,遍历MATCHCOLLIST,用每一个列ID去遍历所有WHEN MATCH组,如若某个MATCH需要更新该列,则将该MATCH的条件和操作分别记录在一个WHEN结构中的CONDITION和VALUE中;
当遍历完所有WHEN MATCH组,则得到了关于该列所有要更新的条件及更新的值;通过得到的WHENS结构和ELSE构建关于该列最终的CASE表达式,ELSE中存放的是不满足更新条件时该列原有的值。;
第四步,遍历NOTMATCHCOLLIST,用每一个列ID去遍历所有WHEN NOT MATCH组,如若某个NOT MATCH需要插入该列,则将该NOT MATCH的条件和操作分别记录在一个WHEN结构中的CONDITION和VALUE中;
当遍历完所有WHEN NOT MATCH组,则得到了关于该列所有要插入的条件及插入的值;通过得到的WHENS结构和ELSE构建关于该列最终的CASE表达式,ELSE中存放的是不满足该插入条件时的值,应为空;
第五步,当所有需要更新或插入列的CASE表达式构建完成后,将这些列添加进左外连接作用域中;对于需要更新的列,则在左外连接作用域后添加新的列,存放其CASE表达式属性;对于需要插入的列,则将这些列的属性赋值给左外连接作用域中的源表对应列,取代这些列原有的空值。
经过所述步骤S4,左外连接作用域中按顺序存放源表列,目标表列,更新列,标记列作为隐式存在;在这些列中,需要进行更新或插入操作的列都已正确存入其对应的值,而不需要操作的列则都为空。
所述步骤S5中,左外连接作用域已经基本构建完毕,在处理每一行数据时通过每一列的CASE表达式计算出这列应为的值;
CASE表达式通过其中WHEN结构存储的CONDITION来判断此行中的该列是否满足条件;
如若满足,则计算出VALUE中的表达式的值,存入这列;
如不满足,则将ELSE表达式中的值算出,存入这列;
从而使左外连接作用域中的每一行每一列的数据都得到正确值。
所述步骤S6中,在最终执行阶段之前,使用左外连接作用域在内的结构和属性构建一个执行计划节点;在执行阶段,在左外连接作用域的基础上构建一个新的数据结构,该数据结构添加步骤S3得到的标记列。
所述步骤S6中,为防止出现违反唯一性约束,在执行阶段之前先判断目标表中需要操作的列是否存在唯一性约束;
若不违反唯一性约束,在执行阶段判断每一行中的标记列是否为空;
如果为空,则说明该行是需要插入的列,将这行中的所有源表列通过调用插入方法插入到目标表中;
如果标记列不为空,则说明该行是需要更新的列,将这行中所有源表列通过调用更新方法,将对应目标表里的列进行更新。
本发明的有益效果是:该基于并表的多表合并方法,匹配条件灵活,操作简便,可以根据不同条件进行个性化合并更新操作,同时为应对合并多张表的情况,提供了基于并表的多表合并方法,极大的提高了数据处理效率,适宜推广应用。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
附图1为本发明基于并表的多表合并方法示意图。
具体实施方式
为了使本技术领域的人员更好的理解本发明中的技术方案,下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚,完整的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
首先,分析其语法中的各个关键字及其作用:
MERGE INTO目标表USING源表ON合并条件
WHEN MATCHED(AND更新条件1)THEN UPDATE SET…
WHEN MATCHED(AND更新条件2)THEN UPDATE SET……
WHEN NOT MATCHED(AND插入条件1)THEN INSERT…
WHEN NOT MATCHED(AND插入条件2)THEN INSERT……
其中源表可以为多个表,MATCH与NOT MATCH也支持多个。
MERGE INTO关键字后面跟的是待合并(MERGE)的目标表。
USING关键字后面跟的是被合并(MERGE)或者说是合并(MERGE)的源表。
ON后面所跟即为目标表和源表是否匹配(MATCH)的条件,该条件不要求为目标表和源表中的某一主键列,可以为很灵活的条件。
WHEN MATCHED THEN…构成了一组条件和执行语句,即为当满足匹配(MATCH)条件或者并且满足AND之后的更新条件时,完成相对应的更新操作。
WHEN NOT MATCHED THEN…构成了一组条件和执行语句,即为当不满足匹配(MATCH)条件或者并且满足AND之后的插入条件时,完成相对应的插入操作。
WHEN…THEN…在一个MERGE(合并)语句中可以存在多个这样的条件操作语句,如果某一行数据同时满足多个这样的条件,则执行第一个满足该条件的操作。
该基于并表的多表合并方法,包括以下步骤:
S1.将多张源表合并,统称源表;
S2.新建一列标记列,用于区分更新或是插入;
S3.以目标表和源表通过合并条件做左外连接,并在结果后添加到S2得出的标记列;
S4.分析MERGE语句,得出需要更新和插入的列,并为这些列构建表达式;
S5.通过表达式计算得出该列应存的值;
S6.在执行阶段,逐行进行更新或插入。
所述步骤S1中,通过UNION方法将多张源表合并,要求源表必须具有相同数量的列以及对相同的应列类型;且源表不一定是一张表,也可以是子查询(一条SELECT语句)语句,只要保证多个源表的结构相同即可。
所述步骤S2中,由于新建的标记列需要添加到左外连接后的结果之中,而左外连接后的结果中每一列都要用来计算表达式的值,因此新建的标记列的列ID不能为空,需存放某一列的列ID;若该表存在主键列,则新建的标记列的列ID为主键列的ID,否则则为目标表中第一列不为空的列的列ID。
所述步骤S3中,目标表和源表通过合并条件做左外连接时,先添加源表的所有列,然后添加目标表的所有列,最终添加S2得出的标记列;
所述步骤S3得到的左外连接的结果,称之为左外连接作用域;左外连接作用域中的每一列的指数便为其作用域ID,每一列存放的值为其在所属表中的列ID;
左外连接之后,标记列的值只可为空或者对应列的ID,为空则代表该行在执行阶段应该执行插入操作,为列ID则指明在执行阶段应该对该列进行更新操作。
所述步骤S4中,具体实现流程如下:
第一步,对MERGE语句所包含的信息进行分析,遍历所有WHEN MATCH组,得到每一组WHEN MATCH所要更新的列的列名,然后将这些列名所对应的列ID取一个并集,命名为MATCHCOLLIST;
同理,遍历所有WHEN NOT MATCH组,得到每一组WHEN NOT MATCH所有插入的列的列名,然后将这些列名所对应的列ID取一个并集,命名为NOTMATCHCOLLIST;
第二步,为需要更新或者插入的列构建CASE表达式
CASE表达式由WHENS结构和ELSE结构组成,WHENS结构是WHEN结构的数组;WHEN结构里包含CONDITION和VALUE,其中CONDITION保存该MATCH的额外更新条件,如果无额外更新条件,则CONDITION的值则为ON条件;VALUE表达式中存的是该列即将被更新后的值;
在一个CASE表达式中,WHEN结构体可以有多个,用来保存所有该列符合的条件以及该条件下应当被更新的值;
第三步,遍历MATCHCOLLIST,用每一个列ID去遍历所有WHEN MATCH组,如若某个MATCH需要更新该列,则将该MATCH的条件和操作分别记录在一个WHEN结构中的CONDITION和VALUE中;
当遍历完所有WHEN MATCH组,则得到了关于该列所有要更新的条件及更新的值;通过得到的WHENS结构和ELSE构建关于该列最终的CASE表达式,ELSE中存放的是不满足更新条件时该列原有的值。;
第四步,遍历NOTMATCHCOLLIST,用每一个列ID去遍历所有WHEN NOT MATCH组,如若某个NOT MATCH需要插入该列,则将该NOT MATCH的条件和操作分别记录在一个WHEN结构中的CONDITION和VALUE中;
当遍历完所有WHEN NOT MATCH组,则得到了关于该列所有要插入的条件及插入的值;通过得到的WHENS结构和ELSE构建关于该列最终的CASE表达式,ELSE中存放的是不满足该插入条件时的值,应为空;
第五步,当所有需要更新或插入列的CASE表达式构建完成后,将这些列添加进左外连接作用域中;对于需要更新的列,则在左外连接作用域后添加新的列,存放其CASE表达式属性;对于需要插入的列,则将这些列的属性赋值给左外连接作用域中的源表对应列,取代这些列原有的空值。
经过所述步骤S4,左外连接作用域中按顺序存放源表列,目标表列,更新列,标记列作为隐式存在;在这些列中,需要进行更新或插入操作的列都已正确存入其对应的值,而不需要操作的列则都为空。
所述步骤S5中,左外连接作用域已经基本构建完毕,在处理每一行数据时通过每一列的CASE表达式计算出这列应为的值;
CASE表达式通过其中WHEN结构存储的CONDITION来判断此行中的该列是否满足条件;
如若满足,则计算出VALUE中的表达式的值,存入这列;
如不满足,则将ELSE表达式中的值算出,存入这列;
从而使左外连接作用域中的每一行每一列的数据都得到正确值。
所述步骤S6中,在最终执行阶段之前,使用左外连接作用域在内的结构和属性构建一个执行计划节点;在执行阶段,在左外连接作用域的基础上构建一个新的数据结构,该数据结构添加步骤S3得到的标记列。
所述步骤S6中,为防止出现违反唯一性约束,在执行阶段之前先判断目标表中需要操作的列是否存在唯一性约束;
若不违反唯一性约束,在执行阶段判断每一行中的标记列是否为空;
如果为空,则说明该行是需要插入的列,将这行中的所有源表列通过调用插入方法插入到目标表中;
如果标记列不为空,则说明该行是需要更新的列,将这行中所有源表列通过调用更新方法,将对应目标表里的列进行更新。
实施例1
以将各地订单汇总到全国订单的情况为例。
在更新数据和插入数据的同时,允许使用多个条件进行筛选,根据不同条件做不同的数据操作,而不是简单地更新和插入。
当只关心某张订单中已有的产品时,对于该订单中没有的产品完全可以选择不插入;当只关心大订单时,仅更新和插入订单量大于一定数目的数据;当需要根据订单数量的区间对数据进行不同的更新时,可以使用到多个MATCHED条件进行区分,从而进行不同的操作;当更新已有的数据时,使用该基于并表的多表合并方法也可以很轻易地将各产品销量等数据替换成几张表中较大或较小的数值,从而得出各个产品在各个地区间的最大销量和最小销量等信息;可以使用该基于并表的多表合并方法的一句SQL语句实现原本多句SQL语句才能实现的功能,使用起来更加方便,在某些场景中下也会使用更少的表,而使用INSERTON CONFLICT并无法完成这些功能。
针对一次性合并多张表的情况下,该基于并表的多表合并方法优先对源表进行合并。例如每月从各地订单汇总到全国订单时,可以根据订单地区,由小到大合并,最终将各省份订单合并为当月全国订单,并更新合并到全国年份订单当中,有使用更少的SQL语句数量和使用上更加便捷的优点。
实施例2
以当前数据库内存在如下EMPLOYE表与MANAGER表两张结构相同的表,两张表均有id,name,salary三个属性的情况为例,来进行说明。
表1 EMPLOYE表
ID NAME SALARY
1 Tomas 1200
2 Jim 8300
3 Wendy 5000
表2 MANAGER表
ID NAME SALARY
1 Tomas 8700
3 Tom 12000
4 Jack 4000
该基于并表的多表合并方法与INSERT ON CONFLICT相比,具有以下几个有益效果:
第一、具有更灵活的匹配条件
该基于并表的多表合并方法和INSERT ON CONFLICT对匹配条件的限制如下,该基于并表的多表合并方法对两张表进行合并更新的匹配条件可以是多个条件,并且可以使用比较运算符。而INSERT ON CONFLICT只能是具有唯一性约束的列名,且默认比较该列与源表同一位置的列是否相等。
表3合并更新的匹配条件
第二、满足匹配条件的数据可以根据不同条件再次进行分类
假设此时需要为同时存在于EMPLOYE和MANAGER两表中的人员涨薪,如果MANAGER表中该人员的salary小于10000则涨薪为MANAGER表中的薪水,如果大于等于10000则更新为10000。
使用该基于并表的多表合并方法实现该功能的一种SQL语句实现如下:
MERGE INTO EMPLOYE AS EM
USING MANAGER AS MA
ON EM.ID=MA.ID
WHEN MATCHED AND MA.SALARY<10000 THEN UPDATE SET SALARY=MA.SALARY
WHEN MATCHED AND MA.SALARY>=10000 THEN UPDATE SET SALARY=10000;
而使用INSERT ON CONFLICT无法完成这样的功能,只能统一修改为10000的定值,或者更新成MANAGER表中的SALARY。
第三、不满足匹配条件的数据可以根据不同条件进行分类和个性化插入或不插入
如果此时需要将存在于EMPLOYE表中,但不存在于MANAGER表中,且薪水大于8000的人员提薪500并提拔到管理层中,使用该基于并表的多表合并方法的一种SQL实现如下:
MERGE INTO MANAGER AS MA
USING EMPLOYE AS EM
ON MA.ID=EM.ID
WHEN NOT MATCHED AND EM.SALARY>8000THEN INSERT VALUES(EM.ID,EM.NAME,EM.SALARY+500);
使用INSERT ON CONFLICT无法实现这样的功能,只能将MANAGER表中不存在的数据插入,不能分辨SALARY是否大于8000,也无法实现SALARY+500的功能。
第四、该基于并表的多表合并方法可以同时使用多个源表进行合并更新
INSERT ON CONFLICT进行合并更新时,只能使用2张表,一张为目标表,一张为源表。该基于并表的多表合并方法此基础上还可以使用多表进行合并更新,例如使用EMPLOYE表和MANAGER表来更新RESOURCE表,基于并表的多表MERGE的SQL语言实现如下:
MERGE INTO RESOURCE AS RE
USING(EMPLOYE,MANAGER)AS EX
ON RE.ID=EX.ID
WHEN MATCHED…
WHEN NOT MATCHED…
以上所述的实施例,只是本发明具体实施方式的一种,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。

Claims (8)

1.一种基于并表的多表合并方法,其特征在于,包括以下步骤:
S1. 将多张源表合并,统称源表;
S2. 新建一列标记列,用于区分更新或是插入;
S3. 以目标表和源表通过合并条件做左外连接,并在结果后添加到S2得出的标记列;
S4. 分析MERGE语句,得出需要更新和插入的列,并为这些列构建表达式;具体实现流程如下:
第一步,对MERGE语句所包含的信息进行分析,遍历所有WHEN MATCH组,得到每一组WHEN MATCH所要更新的列的列名,然后将这些列名所对应的列ID取一个并集,命名为MATCHCOLLIST;
同理,遍历所有WHEN NOT MATCH组,得到每一组WHEN NOT MATCH所有插入的列的列名,然后将这些列名所对应的列ID取一个并集,命名为NOTMATCHCOLLIST;
第二步,为需要更新或者插入的列构建CASE表达式
CASE表达式由WHENS结构和ELSE结构组成,WHENS结构是WHEN结构的数组;WHEN结构里包含CONDITION和VALUE,其中CONDITION保存该MATCH的额外更新条件,如果无额外更新条件,则CONDITION的值则为ON条件;VALUE表达式中存的是该列即将被更新后的值;
在一个CASE表达式中,WHEN结构体可以有多个,用来保存所有该列符合的条件以及该条件下应当被更新的值;
第三步,遍历MATCHCOLLIST,用每一个列ID去遍历所有WHEN MATCH组,如若某个MATCH需要更新该列,则将该MATCH的条件和操作分别记录在一个WHEN结构中的CONDITION和VALUE中;
当遍历完所有WHEN MATCH组,则得到了关于该列所有要更新的条件及更新的值;通过得到的WHENS结构和ELSE构建关于该列最终的CASE表达式,ELSE中存放的是不满足更新条件时该列原有的值;
第四步,遍历NOTMATCHCOLLIST,用每一个列ID去遍历所有WHEN NOT MATCH组,如若某个NOT MATCH需要插入该列,则将该NOT MATCH的条件和操作分别记录在一个WHEN结构中的CONDITION和VALUE中;
当遍历完所有WHEN NOT MATCH组,则得到了关于该列所有要插入的条件及插入的值;通过得到的WHENS结构和ELSE构建关于该列最终的CASE表达式,ELSE中存放的是不满足该插入条件时的值,应为空;
第五步,当所有需要更新或插入列的CASE表达式构建完成后,将这些列添加进左外连接作用域中;对于需要更新的列,则在左外连接作用域后添加新的列,存放其CASE表达式属性;对于需要插入的列,则将这些列的属性赋值给左外连接作用域中的源表对应列,取代这些列原有的空值;
S5. 通过表达式计算得出该列应存的值;
S6. 在执行阶段,逐行进行更新或插入。
2.根据权利要求1所述的基于并表的多表合并方法,其特征在于:所述步骤S1中,通过UNION方法将多张源表合并,要求源表必须具有相同数量的列以及对应相同的列类型;且源表不一定是一张表,也可以是子查询语句,只要保证多个源表的结构相同即可。
3.根据权利要求1或2所述的基于并表的多表合并方法,其特征在于:所述步骤S2中,由于新建的标记列需要添加到左外连接后的结果之中,而左外连接后的结果中每一列都要用来计算表达式的值,因此新建的标记列的列ID不能为空,需存放某一列的列ID;若该表存在主键列,则新建的标记列的列ID为主键列的ID,否则则为目标表中第一列不为空的列的列ID。
4.根据权利要求3所述的基于并表的多表合并方法,其特征在于:所述步骤S3中,目标表和源表通过合并条件做左外连接时,先添加源表的所有列,然后添加目标表的所有列,最终添加S2得出的标记列;
所述步骤S3得到的左外连接的结果,称之为左外连接作用域;左外连接作用域中的每一列的指数便为其作用域ID,每一列存放的值为其在所属表中的列ID;
左外连接之后,标记列的值只可为空或者对应列的ID,为空则代表标记行在执行阶段应该执行插入操作,为列ID则指明在执行阶段应该对标记列进行更新操作。
5.根据权利要求4所述的基于并表的多表合并方法,其特征在于:经过所述步骤S4,左外连接作用域中按顺序存放源表列,目标表列,更新列,标记列作为隐式存在;在这些列中,需要进行更新或插入操作的列都已正确存入其对应的值,而不需要操作的列则都为空。
6.根据权利要求5所述的基于并表的多表合并方法,其特征在于:所述步骤S5中,在处理每一行数据时通过每一列的CASE表达式计算出这列应为的值;
CASE表达式通过其中WHEN结构存储的CONDITION来判断此行中的该列是否满足条件;
如若满足,则计算出VALUE中的表达式的值,存入这列;
如不满足,则将ELSE表达式中的值算出,存入这列;
从而使左外连接作用域中的每一行每一列的数据都得到正确值。
7.根据权利要求6所述的基于并表的多表合并方法,其特征在于:所述步骤S6中,在最终执行阶段之前,使用左外连接作用域在内的结构和属性构建一个执行计划节点;在执行阶段,在左外连接作用域的基础上构建一个新的数据结构,该数据结构添加步骤S3得到的标记列。
8.根据权利要求7所述的基于并表的多表合并方法,其特征在于:所述步骤S6中,在执行阶段之前先判断目标表中需要操作的列是否存在唯一性约束;
若不违反唯一性约束,在执行阶段判断每一行中的标记列是否为空;
如果为空,则说明标记行是需要插入的列,将这行中的所有源表列通过调用插入方法插入到目标表中;
如果标记列不为空,则说明标记行是需要更新的列,将这行中所有源表列通过调用更新方法,将对应目标表里的列进行更新。
CN202010497848.5A 2020-06-04 2020-06-04 一种基于并表的多表合并方法 Active CN111639091B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010497848.5A CN111639091B (zh) 2020-06-04 2020-06-04 一种基于并表的多表合并方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010497848.5A CN111639091B (zh) 2020-06-04 2020-06-04 一种基于并表的多表合并方法

Publications (2)

Publication Number Publication Date
CN111639091A CN111639091A (zh) 2020-09-08
CN111639091B true CN111639091B (zh) 2023-09-19

Family

ID=72332501

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010497848.5A Active CN111639091B (zh) 2020-06-04 2020-06-04 一种基于并表的多表合并方法

Country Status (1)

Country Link
CN (1) CN111639091B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11841857B2 (en) 2022-02-22 2023-12-12 International Business Machines Corporation Query efficiency using merged columns

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106033436A (zh) * 2015-03-13 2016-10-19 中国石油化工股份有限公司 一种数据库的合并方法
CN108509643A (zh) * 2018-04-12 2018-09-07 珠海横琴盛达兆业科技投资有限公司 一种基于BootstrapTable平台可选择数据导出的方法
CN109117431A (zh) * 2017-06-23 2019-01-01 横河电机株式会社 用于将来自源应用的源数据合并至目标应用的目标数据的系统和方法
CN110109910A (zh) * 2018-01-08 2019-08-09 广东神马搜索科技有限公司 数据处理方法及系统、电子设备和计算机可读存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7899784B2 (en) * 2003-05-28 2011-03-01 Oracle International Corporation Method and apparatus for performing multi-table merge operations in a database environment

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106033436A (zh) * 2015-03-13 2016-10-19 中国石油化工股份有限公司 一种数据库的合并方法
CN109117431A (zh) * 2017-06-23 2019-01-01 横河电机株式会社 用于将来自源应用的源数据合并至目标应用的目标数据的系统和方法
CN110109910A (zh) * 2018-01-08 2019-08-09 广东神马搜索科技有限公司 数据处理方法及系统、电子设备和计算机可读存储介质
CN108509643A (zh) * 2018-04-12 2018-09-07 珠海横琴盛达兆业科技投资有限公司 一种基于BootstrapTable平台可选择数据导出的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李鸯 .嵌套列存数据存储设计及其查询更新优化研究.《中国优秀硕士学位论文全文数据库信息科技辑》.2019,全文. *

Also Published As

Publication number Publication date
CN111639091A (zh) 2020-09-08

Similar Documents

Publication Publication Date Title
AU2018261160B2 (en) Systems and methods of applying pragmatics principles for interaction with visual analytics
CN110291517B (zh) 图数据库中的查询语言互操作性
WO2020007224A1 (zh) 知识图谱构建及智能应答方法、装置、设备及存储介质
US8370355B2 (en) Managing entities within a database
Lambrix et al. SAMBO—a system for aligning and merging biomedical ontologies
US8176003B2 (en) Automatic designation of XBRL taxonomy tags
CN103810212B (zh) 一种数据库索引的自动创建方法及系统
US8589424B1 (en) Method and system for accurate medical-code translation
US8321390B2 (en) Methods and apparatus for organizing data in a database
US10733172B2 (en) Method and computing device for minimizing accesses to data storage in conjunction with maintaining a B-tree
US7725483B2 (en) Method for improved processing of expression-based data
US9292544B2 (en) XBRL flat table mapping system and method
US9542484B2 (en) Updating ontology while maintaining document annotations
CN104850565B (zh) 一种基于k-v存储系统的元数据管理方法
US11550853B2 (en) Using natural language expressions to define data visualization calculations that span across multiple rows of data from a database
CN102768674A (zh) 一种基于路径结构的xml数据存储方法
CN110968713B (zh) Bim多尺度信息检索方法及装置
CN109918394A (zh) 数据查询方法、系统、计算机装置及计算机可读存储介质
CN111639091B (zh) 一种基于并表的多表合并方法
US11144577B2 (en) Method for efficient mapping updates between dynamic knowledge organization systems
US11238084B1 (en) Semantic translation of data sets
US20190095481A1 (en) Generating a query
US8239371B2 (en) Fast search views over business objects
US20080294673A1 (en) Data transfer and storage based on meta-data
CN111190965B (zh) 基于文本数据的即席关系分析系统及方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant