一种连接查询方法及装置制造方法

文档序号:6503149阅读:92来源:国知局
一种连接查询方法及装置制造方法
【专利摘要】本发明公开了一种连接查询方法及装置,包括:为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合;获取至少两个行记录集合分别对应的关联字段名;针对至少两个行记录集合中的每个行记录,分别根据行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值;对至少两个行记录集合进行比较,判断是否有属性值相等的行记录;如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合;实现了在对子查询结果进行比较及合并时无特定格式要求,提高方案的扩展性的目的。
【专利说明】一种连接查询方法及装置

【技术领域】
[0001]本发明涉及数据库查询领域,特别涉及一种连接查询方法及装置。

【背景技术】
[0002]在关系型数据库应用中,使用连接查询指令进行查询,可以将有关联的多张表中,关联字段的字段值相同的行连接起来,合并为一个结果输出。由于连接查询指令的一次查询是针对多张表进行的,如果其中一张或多张表的数据量比较多时,查询的速度会非常慢。
[0003]为了解决这一问题,有些方案提出将连接查询分为多个子查询,以降低一次查询的数据量,提高查询速度。由于返回的子查询结果为表结构,特定含义的字段值被放在由特定含义的字段名统领的列中,对子查询结果中属于关联字段的字段值的操作,需要通过对关联字段所在列的操作实现,因此,为了便于将多个子查询结果中关联字段的字段值进行比较,这些方案对子查询结果的格式有特定要求,要求各个子查询结果中的关联字段的字段值被调整在固定列,通过对这些子查询的结果的固定列中的字段值进行比较,将固定列中字段值相同的行记录合并,实现获得连接查询的结果的目的。
[0004]可见,由于这些方案对子查询结果存在特定格式要求,需要根据固定列中的字段值进行比较及合并,导致方案的扩展性较差。


【发明内容】

[0005]有鉴于此,本发明的主要目的在于提供一种连接查询方法及装置以实现在对子查询结果进行比较及合并时无特定格式要求,进而提高方案的扩展性的目的。
[0006]在本发明实施例的一个方面,提供了一种连接查询方法,该方法包括:
[0007]为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合;
[0008]获取所述至少两个行记录集合分别对应的关联字段名;
[0009]针对所述至少两个行记录集合中的每个行记录,分别根据行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值;
[0010]对所述至少两个行记录集合进行比较,判断是否有属性值相等的行记录;
[0011]如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合;
[0012]如果还有属性值相等的行记录,返回到将属性值相等的行记录拼接为一行记录的步骤;
[0013]如果没有,返回获得的合并行记录集合。
[0014]在本发明实施例的另一个方面,提供了一种连接查询装置,该装置包括:
[0015]子查询单元:用于为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合;
[0016]获取关联字段单元:用于获取所述至少两个行记录集合分别对应的关联字段名;
[0017]属性生成单元:用于针对所述至少两个行记录集合中的每个行记录,分别根据行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值;
[0018]比较单元:用于对所述至少两个行记录集合进行比较,判断是否有属性值相等的行记录;
[0019]合并单元:用于如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合,判断是否还有属性值相等的行记录,如果有,触发合并单元重新执行,如果没有,触发返回单元执行;
[0020]返回单元:用于返回获得的合并行记录集合。
[0021]可见本发明具有如下有益效果:
[0022]在本发明中,由于为至少两个子查询结果的每个行记录中的字段值均建立了与字段名的映射关系,因此,所获得的与至少两个子查询结果相应的至少两个行记录集合中的每个行记录都是字段值与字段名有映射关系的独立的记录,不存在固定的数据结构,为了能够对两个行记录集合进行连接,又获取指定的每个行记录集合各自对应的关联字段名,针对每个行记录集合中的每个行记录,分别根据行记录所在行记录集合对应的关联字段名有映射关系的字段值,即关联字段的字段值,生成每个行记录的属性值,因此,在进行比较及合并时,不存在特定格式要求,对于每个行记录来说,如果与关联字段名有映射关系的字段值相同,则行记录的属性值也相同,可以直接根据与关联字段名有映射关系的字段值所确定的行记录的属性值,对至少两个行记录集合中的行记录进行比较,将属性值相等的行记录进行连接,而且,所返回的合并行记录集合中的行记录,同样均为字段值与字段名有映射关系的独立记录,可以按照实际需要灵活指定最终合并行记录集合输出的格式,具有较强的扩展性。

【专利附图】

【附图说明】
[0023]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0024]图1是根据本发明实施例的一种连接查询方法的流程示意图之一;
[0025]图2是根据本发明实施例的一种连接查询方法的流程示意图之二 ;
[0026]图3是根据本发明实施例的一种连接查询方法的流程示意图之三;
[0027]图4是根据本发明实施例的一种连接查询装置的结构示意图。

【具体实施方式】
[0028]为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和【具体实施方式】对本发明实施例作进一步详细的说明。
[0029]本发明实施例的连接查询方法,适用于关系型数据库的连接查询。下面,首先对关系型数据库进行简单介绍:
[0030]在关系型数据库中,可以包含多个表,每个表中包含若干行记录,每行记录中包含若干字段值,特定含义的字段值放在由该特定含义的字段名统领的固定列中。表与表之间的关系,通过关联字段建立,例如,在某一关系型数据库中包含如下表一、表二和表三,表一、表二及表三的关系通过属于关联字段的字段名2A、字段名2B、字段名2C对应的相同字段值建立:
[0031]表一:
[0032]

【权利要求】
1.一种连接查询方法,其特征在于,包括: 为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合; 获取所述至少两个行记录集合分别对应的关联字段名; 针对所述至少两个行记录集合中的每个行记录,分别根据行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值; 对所述至少两个行记录集合进行比较,判断是否有属性值相等的行记录; 如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合; 如果还有属性值相等的行记录,返回到将属性值相等的行记录拼接为一行记录的步骤; 如果没有,返回获得的合并行记录集合。
2.根据权利要求1所述的方法,其特征在于,还包括通过以下步骤获得所述至少两个子查询结果: 获得需返回的字段名及查询条件; 根据预先保存的信息配置表,查询需返回的字段名对应的表名、该表名对应的连接属性,其中,所述预先保存的信息配置表用于记录字段名,与字段名对应的表名,与表名对应的连接属性、其中,按照预设的关联条件,至少存在两个互相不关联的连接属性; 按照互相关联的为一组、不关联的各自为单独一组的方式,将查询出的连接属性进行分组、且将需返回的字段名、及查询条件分到与之对应的连接属性的组中,获得与连接属性对应的至少两个查询组; 针对每个查询组,根据查询指令生成规则,对应该查询组生成至少一条子查询指令; 执行所述子查询指令,获得子查询结果。
3.根据权利要求2所述的方法,其中所述根据查询指令生成规则,对应该查询组生成至少一条子查询指令包括: 根据单表查询的查询指令生成规则,对应该查询组中的每个表名,各生成一条子查询指令; 其中,所述单表查询的查询指令生成规则包括:该查询组中对应该表名的字段名作为该条子查询指令的被查询字段、且该查询组中对应该表名的字段名的查询条件作为该条子查询指令的查询条件,该表名为被查询的表。
4.根据权利要求2所述的方法,其特征在于,其中所述根据查询指令生成规则,对应该查询组生成至少一条子查询指令包括: 如果该查询组包含多个表名,根据多表查询指令生成规则生成一条子查询指令,如果该查询组包含一个表名,根据单表查询指令生成规则生成一条子查询指令; 其中,所述多表查询的查询指令生成规则包括:该查询组包含的字段名,作为该条子查询指令的被查询字段;该查询组包含的查询条件,作为该条子查询指令的查询条件;该查询组包含的表名,作为该条子查询指令的被连接的表;该查询组包含的、且与该查询组对应的连接属性对应的、且属于关联字段的字段名,作为该条子查询指令的被连接的表的关联字段,其中,属于关联字段的字段名在信息配置表中有特定属性; 所述单表查询的查询指令生成规则包括:该查询组包含的字段名,作为该条子查询指令的被查询字段;该查询组包含的查询条件,作为该条子查询指令的查询条件;该查询组包含的表名,作为该条子查询指令的被查询的表。
5.根据权利要求2所述的方法,其特征在于,针对每个查询组,在所述根据查询指令生成规则,对应该查询组生成至少一条子查询指令之前,还包括: 判断该查询组是否与缓存系统中的历史查询组相匹配,匹配条件为该查询组对应的连接属性与该历史查询组对应的连接属性互相关联、且该查询组包含的查询条件与该历史查询组包含的查询条件相同、且该查询组包含的字段名为该历史查询组包含的字段名的子集; 如果匹配,从所述缓存系统中取出与该查询组匹配的历史查询组对应的行记录集合中与需返回的字段名有映射关系的字段值的集合,作为该查询组对应的行记录集合,进入所述获取至少两个行记录集合分别对应的关联字段名的步骤; 如果不匹配,进入根据查询指令生成规则,对应该查询组生成至少一条子查询指令的步骤,且将生成该子查询指令的查询组与执行该子查询指令之后相应获得的行记录集合对应,并将该查询组对应的行记录集合保存于所述缓存系统。
6.根据权利要求5所述的方法,其特征在于,所述如果匹配,从所述缓存系统中取出与该查询组匹配的历史查询组对应的行记录集合的具体实现为: 如果匹配,且该历史查询组的缓存期限未过期,从所述缓存系统中取出该历史查询组对应的行记录集合中与需返回的字段名有映射关系的字段值的集合,作为该查询组对应的行记录集合,进入所述获取至少两个行记录集合分别对应的关联字段名的步骤; 如果匹配,且该历史查询组的缓存期限已过期,进入根据查询指令生成规则,对应该查询组生成至少一条子查询指令的步骤,且将生成该子查询指令的查询组与执行该子查询指令之后相应获得的行记录集合对应,并将该查询组对应的行记录集合保存于所述缓存系统。
7.根据权利要求2所述的方法,其特征在于,所述获取至少两个行记录集合分别对应的关联字段名的具体实现为: 根据生成该子查询指令的查询组、及执行该子查询指令之后相应获得的行记录集合,确定每个行记录集合对应的查询组; 针对每个行记录集合对应的查询组,查询出信息配置表中,与该查询组对应的连接属性对应、且与该查询组包含的表名对应、属于关联字段的字段名,以该属于关联字段的字段名作为该行记录集合对应的关联字段名,其中,属于关联字段的字段名在信息配置表中有特定属性。
8.根据权利要求2所述的方法,其特征在于,所述需返回的字段名及查询条件从客户端获取; 所述返回获得的合并行记录集合具体将所述获得的合并行记录集合返回到所述客户端。
9.根据权利要求2所述的方法,其特征在于,所述获得至少两个查询组之后,还包括:为每个查询组各分配一个线程,所述线程用于执行所述获得该查询组对应的行记录集合之前的任意步骤,所述线程之间为并行执行。
10.根据权利要求9所述的方法,其特征在于, 所述线程一次读取表中的所有数据后,执行子查询指令进行查询; 或者, 所述线程分次读取表中的预设数量行记录,逐次执行子查询指令进行查询。
11.根据权利要求2所述的方法,其特征在于,在所述根据查询指令生成规则,对应一个查询组生成至少一条子查询指令时,还将行记录数量之阈值作为子查询指令中用于限制返回行数的参数。
12.根据权利要求1所述的方法,其特征在于,所述预设的关联条件为连接属性相同,所述互相不关联的连接属性为不相同的连接属性,所述互相关联的连接属性为相同的连接属性。
13.根据权利要求1所述的方法,其特征在于,还包括: 获取所述至少两个行记录集合各自的权重; 按照权重大小,排序所述至少两个行记录集合的位置; 所述如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合包括: 如果有属性值相等的行记录,将在非第一位置的行记录集合中的所述属性值相等的行记录,按排序顺序拼接在第一位置的行记录集合中所述属性值相等的行记录的行尾成为一行,加入合并行记录集合。
14.根据权利要求1或13所述的方法,其特征在于,还包括: 如果所述至少两个行记录集合存在属性值不相等的行记录,将属性值不相等的行记录,作为新行记录插入到合并行记录集合的结尾。
15.根据权利要求13所述的方法,其特征在于,所述信息配置表中的连接属性具有权重,互相关联的连接属性具有相同的权重; 所述获取所述至少两个行记录集合各自的权重包括: 从所述至少两个行记录集合各自对应的连接属性中,提取出各自的权重。
16.一种连接查询装置,其特征在于,包括: 子查询单元:用于为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合; 获取关联字段单元:用于获取所述至少两个行记录集合分别对应的关联字段名;属性生成单元:用于针对所述至少两个行记录集合中的每个行记录,分别根据行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值; 比较单元:用于对所述至少两个行记录集合进行比较,判断是否有属性值相等的行记录; 合并单元:用于如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合,判断是否还有属性值相等的行记录,如果有,触发合并单元重新执行,如果没有,触发返回单元执行; 返回单元:用于返回获得的合并行记录集合。
17.根据权利要求16所述的装置,其特征在于,还包括: 获取输入单元:用于获得需返回的字段名及查询条件; 配置查询单元:用于根据预先保存的信息配置表,查询需返回的字段名对应的表名、该表名对应的连接属性,其中,所述预先保存的信息配置表用于记录字段名,与字段名对应的表名,与表名对应的连接属性、其中,按照预设的关联条件,至少存在两个互相不关联的连接属性; 分组单元:用于按照互相关联的为一组、不关联的各自为单独一组的方式,将查询出的连接属性进行分组、且将需返回的字段名、及查询条件分到与之对应的连接属性的组中,获得与连接属性对应的至少两个查询组; 子查询生成单元:用于针对每个查询组,根据查询指令生成规则,对应该查询组生成至少一条子查询指令;执行所述子查询指令,获得子查询结果。
18.根据权利要求17所述的装置,其特征在于,所述子查询生成单元:用于针对每个查询组,根据单表查询的查询指令生成规则,对应该查询组中的每个表名,各生成一条子查询指令;其中,所述单表查询的查询指令生成规则包括:该查询组中对应该表名的字段名作为该条子查询指令的被查询字段、且该查询组中对应该表名的字段名的查询条件作为该条子查询指令的查询条件,该表名为被查询的表。
19.根据权利要求17所述的装置,其特征在于,所述子查询生成单元:用于针对每个查询组,如果该查询组包含多个表名,根据多表查询指令生成规则生成一条子查询指令,如果该查询组包含一个表名,根据单表查询指令生成规则生成一条子查询指令;其中,所述多表查询的查询指令生成规则包括:该查询组包含的字段名,作为该条子查询指令的被查询字段;该查询组包含的查询条件,作为该条子查询指令的查询条件;该查询组包含的表名,作为该条子查询指令的被连接的表;该查询组包含的、且与该查询组对应的连接属性对应的、且属于关联字段的字段名,作为该条子查询指令的被连接的表的关联字段,其中,属于关联字段的字段名在信息配置表中有特定属性;所述单表查询的查询指令生成规则包括:该查询组包含的字段名,作为该条子查询指令的被查询字段;该查询组包含的查询条件,作为该条子查询指令的查询条件;该查询组包含的表名,作为该条子查询指令的被查询的表。
20.根据权利要求17所述的装置,其中所述子查询生成单元:还用于针对每个查询组,在所述根据查询指令生成规则,对应该查询组生成至少一条子查询指令之前,判断该查询组是否与缓存系统中的历史查询组相匹配,匹配条件为该查询组对应的连接属性与该历史查询组对应的连接属性互相关联、且该查询组包含的查询条件与该历史查询组包含的查询条件相同、且该查询组包含的字段名为该历史查询组包含的字段名的子集;如果匹配,从所述缓存系统中取出与该查询组匹配的历史查询组对应的行记录集合中与需返回的字段名有映射关系的字段值的集合,作为该查询组对应的行记录集合,并触发所述获取关联字段单元执行;如果不匹配,进入所述根据查询指令生成规则,对应该查询组生成至少一条子查询指令的步骤,且将生成该子查询指令的查询组与执行该子查询指令之后相应获得的行记录集合对应,并将该查询组对应的行记录集合保存于所述缓存系统。
21.根据权利要求20所述的装置,其特征在于,所述子查询单元:用于如果匹配,且该历史查询组的缓存期限未过期,从所述缓存系统中取出该历史查询组对应的行记录集合中与需返回的字段名有映射关系的字段值的集合,作为该查询组对应的行记录集合,并触发所述获取关联字段单元执行;如果匹配,且该历史查询组的缓存期限已过期,进入所述根据查询指令生成规则,对应该查询组生成至少一条子查询指令的步骤,且将生成该子查询指令的查询组与执行该子查询指令之后相应获得的行记录集合对应,并将该查询组对应的行记录集合保存于所述缓存系统。
22.根据权利要求17所述的装置,其特征在于,所述获取关联字段单元:用于根据生成该子查询指令的查询组、及执行该子查询指令之后相应获得的行记录集合,确定每个行记录集合对应的查询组;针对每个行记录集合对应的查询组,查询出信息配置表中,与该查询组对应的连接属性对应、且与该查询组包含的表名对应、属于关联字段的字段名,以该属于关联字段的字段名作为该行记录集合对应的关联字段名,其中,属于关联字段的字段名在信息配置表中有特定属性。
23.根据权利要求17所述的装置,其特征在于,所述获取输入单元:用于从客户端获取需返回的字段名及查询条件; 所述返回单元:用于将获得的合并行记录集合返回到所述客户端。
24.根据权利要求17所述的装置,其特征在于,所述分组单元:还用于在获得至少两个查询组之后,为每个查询组各分配一个线程,所述线程用于执行所述获得该查询组对应的行记录集合之前的任意步骤,所述线程之间为并行执行。
25.根据权利要求17所述的装置,其特征在于,所述子查询单元:还用于在根据查询指令生成规则,对应一个查询组生成至少一条子查询指令时,将该行记录数量之阈值作为子查询指令中用于限制返回行数的参数。
26.根据权利要求16所述的装置,其特征在于,所述合并单元:还用于获取所述至少两个行记录集合各自的权重;按照权重大小,排序所述至少两个行记录集合的位置,如果有属性值相等的行记录,在将属性值相等的行记录拼接为一行记录时,将在非第一位置的行记录集合中的所述属性值相等的行记录,按排序顺序拼接在第一位置的行记录集合中所述属性值相等的行记录的行尾成为一行,加入合并行记录集合。
27.根据权利要求16或26所述的装置,其特征在于,所述合并单元:还用于如果所述至少两个行记录集合存在属性值不相等的行记录,将属性值不相等的行记录,作为新行记录插入到合并行记录集合的结尾。
28.根据权利要求26所述的装置,其特征在于,所述合并单元:用于从所述至少两个行记录集合各自对应的连接属性中,提取出各自的权重,其中,信息配置表中的连接属性具有权重,互相关联的连接属性具有相同的权重。
【文档编号】G06F17/30GK104182405SQ201310192991
【公开日】2014年12月3日 申请日期:2013年5月22日 优先权日:2013年5月22日
【发明者】熊水林 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1