CN104182405A - 一种连接查询方法及装置 - Google Patents
一种连接查询方法及装置 Download PDFInfo
- Publication number
- CN104182405A CN104182405A CN201310192991.3A CN201310192991A CN104182405A CN 104182405 A CN104182405 A CN 104182405A CN 201310192991 A CN201310192991 A CN 201310192991A CN 104182405 A CN104182405 A CN 104182405A
- Authority
- CN
- China
- Prior art keywords
- line item
- inquiry
- item set
- field
- group
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种连接查询方法及装置,包括:为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合;获取至少两个行记录集合分别对应的关联字段名;针对至少两个行记录集合中的每个行记录,分别根据行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值;对至少两个行记录集合进行比较,判断是否有属性值相等的行记录;如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合;实现了在对子查询结果进行比较及合并时无特定格式要求,提高方案的扩展性的目的。
Description
技术领域
本发明涉及数据库查询领域,特别涉及一种连接查询方法及装置。
背景技术
在关系型数据库应用中,使用连接查询指令进行查询,可以将有关联的多张表中,关联字段的字段值相同的行连接起来,合并为一个结果输出。由于连接查询指令的一次查询是针对多张表进行的,如果其中一张或多张表的数据量比较多时,查询的速度会非常慢。
为了解决这一问题,有些方案提出将连接查询分为多个子查询,以降低一次查询的数据量,提高查询速度。由于返回的子查询结果为表结构,特定含义的字段值被放在由特定含义的字段名统领的列中,对子查询结果中属于关联字段的字段值的操作,需要通过对关联字段所在列的操作实现,因此,为了便于将多个子查询结果中关联字段的字段值进行比较,这些方案对子查询结果的格式有特定要求,要求各个子查询结果中的关联字段的字段值被调整在固定列,通过对这些子查询的结果的固定列中的字段值进行比较,将固定列中字段值相同的行记录合并,实现获得连接查询的结果的目的。
可见,由于这些方案对子查询结果存在特定格式要求,需要根据固定列中的字段值进行比较及合并,导致方案的扩展性较差。
发明内容
有鉴于此,本发明的主要目的在于提供一种连接查询方法及装置以实现在对子查询结果进行比较及合并时无特定格式要求,进而提高方案的扩展性的目的。
在本发明实施例的一个方面,提供了一种连接查询方法,该方法包括:
为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合;
获取所述至少两个行记录集合分别对应的关联字段名;
针对所述至少两个行记录集合中的每个行记录,分别根据行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值;
对所述至少两个行记录集合进行比较,判断是否有属性值相等的行记录;
如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合;
如果还有属性值相等的行记录,返回到将属性值相等的行记录拼接为一行记录的步骤;
如果没有,返回获得的合并行记录集合。
在本发明实施例的另一个方面,提供了一种连接查询装置,该装置包括:
子查询单元:用于为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合;
获取关联字段单元:用于获取所述至少两个行记录集合分别对应的关联字段名;
属性生成单元:用于针对所述至少两个行记录集合中的每个行记录,分别根据行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值;
比较单元:用于对所述至少两个行记录集合进行比较,判断是否有属性值相等的行记录;
合并单元:用于如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合,判断是否还有属性值相等的行记录,如果有,触发合并单元重新执行,如果没有,触发返回单元执行;
返回单元:用于返回获得的合并行记录集合。
可见本发明具有如下有益效果:
在本发明中,由于为至少两个子查询结果的每个行记录中的字段值均建立了与字段名的映射关系,因此,所获得的与至少两个子查询结果相应的至少两个行记录集合中的每个行记录都是字段值与字段名有映射关系的独立的记录,不存在固定的数据结构,为了能够对两个行记录集合进行连接,又获取指定的每个行记录集合各自对应的关联字段名,针对每个行记录集合中的每个行记录,分别根据行记录所在行记录集合对应的关联字段名有映射关系的字段值,即关联字段的字段值,生成每个行记录的属性值,因此,在进行比较及合并时,不存在特定格式要求,对于每个行记录来说,如果与关联字段名有映射关系的字段值相同,则行记录的属性值也相同,可以直接根据与关联字段名有映射关系的字段值所确定的行记录的属性值,对至少两个行记录集合中的行记录进行比较,将属性值相等的行记录进行连接,而且,所返回的合并行记录集合中的行记录,同样均为字段值与字段名有映射关系的独立记录,可以按照实际需要灵活指定最终合并行记录集合输出的格式,具有较强的扩展性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的一种连接查询方法的流程示意图之一;
图2是根据本发明实施例的一种连接查询方法的流程示意图之二;
图3是根据本发明实施例的一种连接查询方法的流程示意图之三;
图4是根据本发明实施例的一种连接查询装置的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明实施例作进一步详细的说明。
本发明实施例的连接查询方法,适用于关系型数据库的连接查询。下面,首先对关系型数据库进行简单介绍:
在关系型数据库中,可以包含多个表,每个表中包含若干行记录,每行记录中包含若干字段值,特定含义的字段值放在由该特定含义的字段名统领的固定列中。表与表之间的关系,通过关联字段建立,例如,在某一关系型数据库中包含如下表一、表二和表三,表一、表二及表三的关系通过属于关联字段的字段名2A、字段名2B、字段名2C对应的相同字段值建立:
表一:
字段名1 | 字段名2A | 字段名3 |
字段值1.1 | 字段值2.1 | 字段值3.1 |
字段值1.2 | 字段值2.2 | 字段值3.2 |
表二:
字段名2B | 字段名4 | 字段名5 |
字段值2.1 | 字段值4.1 | 字段值5.1 |
字段值2.2 | 字段值4.2 | 字段值5.2 |
表三:
字段名2C | 字段名6 | 字段名7 |
字段值2.1 | 字段值6.1 | 字段值7.1 |
字段值2.2 | 字段值6.2 | 字段值7.2 |
在对表一、表二及表三进行连接查询时,位于表一中第二列的字段名2A为该表的关联字段名,位于表二与表三中第一列的字段名2B、字段名2C为关联字段名,该连接查询在拆分为两个或者三个子查询后,各个子查询返回的子查询结果中关联字段所在列也不同,若根据固定列的字段值对子查询结果进行合并,将涉及到多次对子查询结果的列数调整,且最终得到的连接查询的结果也为固定格式,扩展性较差,因此,需要一种对子查询结果没有格式要求的、可直接根据指定的关联字段的字段值进行比较及合并的连接查询方法,进而提高方案的可扩展性。
有鉴于此,本发明提供如下连接查询的方法:
参见图1所示,为本发明实施例提供的一种连接查询方法的流程示意图,如图所示,该方法可以包括:
S101、为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合;
S102、获取所述至少两个行记录集合分别对应的关联字段名;
S103、针对所述至少两个行记录集合中的每个行记录,分别根据该行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值;
例如,可以将行记录中,与行记录所在行记录集合对应的关联字段名有映射关系的字段值做一定的编码后按照预定顺序连接,之间被特定分隔符如“$”分隔,生成行记录的属性值,当然,还可以预设其他生成方法,在本发明中并不进行限制,不过可以理解的是,不论预设何种生成方法,由于本发明限定的是根据行记录中,与行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值,因此,只要预设的生成方法相同、与关联字段名有映射关系的字段值相同,则行记录的属性值也一定相同。
S104、对所述至少两个行记录集合进行比较,判断是否有属性值相等的行记录;
S105、如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合;
S106、如果还有属性值相等的行记录,返回到步骤S105将属性值相等的行记录拼接为一行记录的步骤;
S107、如果没有,返回获得的合并行记录集合。
应用本发明方法,由于为至少两个子查询结果的每个行记录中的字段值均建立了与字段名的映射关系,所获得的至少两个行记录集合中的每个行记录均为字段值与字段名有映射关系的独立记录,不是固定的表的结构,不存在固定格式,而且,又根据指定的每个行记录集合各自对应的关联字段名,针对每个行记录集合中的每个行记录,分别根据行记录中与关联字段名有映射关系的字段值,生成每个行记录的属性值,因此,不需要根据固定列的字段值进行比较及合并,而是直接根据关联字段的字段值所确定的行记录的属性值对至少两个行记录集合进行比较及合并,因此,本发明的方法是一种对子查询结果没有格式要求的、可直接根据关联字段的字段值进行比较及合并的连接查询方法,可以提高连接查询的扩展性。
为了降低连接查询调用的复杂度,本发明提出以下实施例,在该实施例中仅根据输入的需返回的字段名及查询条件,再结合预先保存的信息配置表,即可获得子查询结果。其中,所述预先保存的信息配置表可以用于记录字段名,与字段名对应的表名,与表名对应的连接属性、其中,按照预设的关联条件,至少存在两个互相不关联的连接属性,属于关联字段的字段名在信息配置表中有特定属性。
为了使信息配置表更加易于理解,结合上述应用场景中的表一、表二及表三对信息配置表举例说明,例如,如上述应用场景中的表一、表二及表三的信息配置表可以如下表所示:
字段名 | 表名 | 连接属性 | 是否关联字段 |
字段名1 | 表一 | QID1_1 | N |
字段名2A | 表一 | QID1_1 | Y |
字段名3 | 表一 | QID1_1 | N |
字段名2B | 表二 | QID1_1 | Y |
字段名4 | 表二 | QID1_1 | N |
字段名5 | 表二 | QID1_1 | N |
字段名2C | 表三 | QID2_2 | Y |
字段名6 | 表三 | QID2_2 | N |
字段名7 | 表三 | QID2_2 | N |
字段名2B | 表二 | QID2_2 | Y |
字段名4 | 表二 | QID2_2 | N |
字段名5 | 表二 | QID2_2 | N |
如上述信息配置表所示,在这个例子中,相等的连接属性为有关联的连接属性。表一对应的连接属性为QID1_1,表二对应的连接属性为QID1_1和QID2_2,表三对应的连接属性为QID2_2,其中,表一和表二对应的连接属性QID1_1有关联,表一和表二对应的关联字段名为字段名2A和2B,表三和表二对应的连接属性QID2_2有关联,表三和表二对应的关联字段名为字段名2C和2B。
需要说明的是,在本发明中所述预设的关联条件可以为连接属性相同,相应地,所述互相不关联的连接属性为不相同的连接属性,所述互相关联的连接属性为相同的连接属性。当然,也可以设置其他的预设的关联条件,在本发明中并不进行限制。
下面,对根据需返回的字段名及查询条件、结合预先保存的信息配置表,即可获得子查询结果的一种可能的实现方式,进行详细说明,参见图2,如图所示,该实施例可以包括:
S200.a、获得需返回的字段名及查询条件;
S200.b、根据预先保存的信息配置表,查询需返回的字段名对应的表名、该表名对应的连接属性,其中,所述预先保存的信息配置表用于记录字段名,与字段名对应的表名,与表名对应的连接属性、其中,按照预设的关联条件,至少存在两个互相不关联的连接属性;
S200.c、按照互相关联的为一组、不关联的各自为单独一组的方式,将查询出的连接属性进行分组、且将需返回的字段名、及查询条件分到与之对应的连接属性的组中,获得与连接属性对应的至少两个查询组;
S200.d、针对每个查询组,根据查询指令生成规则,对应该查询组生成至少一条子查询指令;
S200.e、执行所述子查询指令,获得子查询结果;
S201、为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合;
S202.a、根据子查询指令执行后返回的子查询结果相应获得的行记录集合、及该子查询指令对应的查询组,确定每个行记录集合对应的查询组;
S202.b、针对每个行记录集合对应的查询组,查询出信息配置表中,与该查询组对应的连接属性对应、且与该查询组包含的表名对应、属于关联字段的字段名,以该属于关联字段的字段名作为该行记录集合对应的关联字段名,其中,属于关联字段的字段名在信息配置表中有特定属性;
需要说明的是,在本发明实施例中,获取至少两个行记录集合分别对应的关联字段名可以根据临时输入获取,也可以如步骤S202.a及S202.b根据信息配置表记录的相关信息获取,在本发明中并不进行限制。
S203、针对所述至少两个行记录集合中的每个行记录,分别根据该行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值;
S204、对所述至少两个行记录集合进行比较,判断是否有属性值相等的行记录;
S205、如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合;
S206、判断是否还有属性值相等的行记录;
S207、如果有,返回到步骤S205将属性值相等的行记录拼接为一行记录的步骤;
S208、如果没有,返回获得的合并行记录集合。
可见,由于信息配置表中记录了字段名,与字段名对应的表名,与表名对应的连接属性,且该信息配置表中至少存在两个互相不关联的连接属性,因此,应用上述实施例使得使用者在使用连接查询时,不需要关心数据库的结构,也不需要关心连接查询如何拆分为子查询的问题,仅输入需返回的字段名及查询条件,即可根据信息配置表自动拆分为至少两个查询组、对应一个查询组生成至少一条子查询指令,执行至少两个子查询指令后返回至少两个子查询结果,降低了连接查询调用的复杂度;
而且,由于信息配置表中一个表名可以对应多个连接属性,因此,在需要同一表与不同表连接时,可以在信息配置表中为该表配置对应不同的连接属性,这些连接属性可以分别与不同表对应的连接属性相关联,进而可以根据连接属性确定该表与哪一表连接,相当于可以根据信息配置表实现灵活拆分子查询的目的;
另外,还可以根据实施需要,在信息配置表中,为相关联的连接属性对应的表名所对应的属于关联字段的字段名设置特定属性,进而,可以根据子查询指令执行后返回的子查询结果相应获得的行记录集合、及该子查询指令对应的查询组,确定每个行记录集合对应的查询组,再针对每个行记录集合对应的查询组,查询出信息配置表中,与该查询组对应的连接属性对应、且与该查询组包含的表名对应、属于关联字段的字段名,以该属于关联字段的字段名作为该行记录集合对应的关联字段名,从而,使用者更无需关心用于连接行记录集合的关联字段名,进一步降低了连接查询调用的复杂度。
下面,再对步骤S200.d根据查询指令生成规则,对应查询组生成至少一条子查询指令的两种可能的实现方式,进行详细介绍。例如,其中一实施例可以包括:
S200.a、获得需返回的字段名及查询条件;
S200.b、根据预先保存的信息配置表,查询需返回的字段名对应的表名、该表名对应的连接属性,其中,所述预先保存的信息配置表用于记录字段名,与字段名对应的表名,与表名对应的连接属性、其中,按照预设的关联条件,至少存在两个互相不关联的连接属性,属于关联字段的字段名在信息配置表中有特定属性;
S200.c、按照互相关联的为一组、不关联的各自为单独一组的方式,将查询出的连接属性进行分组、且将需返回的字段名、及查询条件分到与之对应的连接属性的组中,获得与连接属性对应的至少两个查询组;
S200.d、针对每个查询组,根据单表查询的查询指令生成规则,对应该查询组中的每个表名,各生成一条子查询指令;
其中,所述单表查询的查询指令生成规则包括:该查询组中对应该表名的字段名作为该条子查询指令的被查询字段、且该查询组中对应该表名的字段名的查询条件作为该条子查询指令的查询条件,该表名为被查询的表;
S200.e、执行所述子查询指令,获得子查询结果;
S201、为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合;
S202.a、根据子查询指令执行后返回的子查询结果相应获得的行记录集合、及该子查询指令对应的查询组,确定每个行记录集合对应的查询组;
S202.b、针对每个行记录集合对应的查询组,查询出信息配置表中,与该查询组对应的连接属性对应、且与该查询组包含的表名对应、属于关联字段的字段名,以该属于关联字段的字段名作为该行记录集合对应的关联字段名,其中,属于关联字段的字段名在信息配置表中有特定属性;
在本发明实施例中,获取至少两个行记录集合分别对应的关联字段名可以根据临时输入获取,也可以如步骤S202.a及S202.b,根据信息配置表中,字段名与连接属性对应、与表名对应、属于关联字段的字段名有特定属性,从信息配置表中,查询出与查询组对应的连接属性对应、且与查询组包含的表名对应、属于关联字段的字段名,将该属于关联字段的字段名作为该行记录集合对应的关联字段名;
S203、针对所述至少两个行记录集合中的每个行记录,分别根据该行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值;
S204、对所述至少两个行记录集合进行比较,判断是否有属性值相等的行记录;
S205、如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合;
S206、判断是否还有属性值相等的行记录;
S207、如果有,返回到步骤S205将属性值相等的行记录拼接为一行记录的步骤;
S208、如果没有,返回获得的合并行记录集合。
在该实施例中,根据单表查询的查询指令生成规则,对应查询组中的每个表名,各生成一条子查询指令,从而使得子查询得到最小化的拆分,对于单个子查询来说,其查询的数据量达到最小,但是,相应的,返回的行记录集合的数量达到最大,进行连接的工作量相应增加,因此,比较适于单表数据量大,表数量少的数据库的连接查询。
再例如,另一实施例可以包括:
S200.a、获得需返回的字段名及查询条件;
S200.b、根据预先保存的信息配置表,查询需返回的字段名对应的表名、该表名对应的连接属性,其中,所述预先保存的信息配置表用于记录字段名,与字段名对应的表名,与表名对应的连接属性、其中,按照预设的关联条件,至少存在两个互相不关联的连接属性,属于关联字段的字段名在信息配置表中有特定属性;
S200.c、按照互相关联的为一组、不关联的各自为单独一组的方式,将查询出的连接属性进行分组、且将需返回的字段名、及查询条件分到与之对应的连接属性的组中,获得与连接属性对应的至少两个查询组;
S200.d、针对每个查询组,如果该查询组包含多个表名,根据多表查询指令生成规则生成一条子查询指令,如果该查询组包含一个表名,根据单表查询指令生成规则生成一条子查询指令;
其中,所述多表查询的查询指令生成规则包括:该查询组包含的字段名,作为该条子查询指令的被查询字段;该查询组包含的查询条件,作为该条子查询指令的查询条件;该查询组包含的表名,作为该条子查询指令的被连接的表;该查询组包含的、且与该查询组对应的连接属性对应的、且属于关联字段的字段名,作为该条子查询指令的被连接的表的关联字段,其中,属于关联字段的字段名在信息配置表中有特定属性;
所述单表查询的查询指令生成规则包括:该查询组包含的字段名,作为该条子查询指令的被查询字段;该查询组包含的查询条件,作为该条子查询指令的查询条件;该查询组包含的表名,作为该条子查询指令的被查询的表
S200.e、执行所述子查询指令,获得子查询结果;
S201、为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合;
S202.a、根据子查询指令执行后返回的子查询结果相应获得的行记录集合、及该子查询指令对应的查询组,确定每个行记录集合对应的查询组;
S202.b、针对每个行记录集合对应的查询组,查询出信息配置表中,与该查询组对应的连接属性对应、且与该查询组包含的表名对应、属于关联字段的字段名,以该属于关联字段的字段名作为该行记录集合对应的关联字段名,其中,属于关联字段的字段名在信息配置表中有特定属性;
在本发明实施例中,获取至少两个行记录集合分别对应的关联字段名可以根据临时输入获取,也可以如步骤S202.a及S202.b,根据信息配置表中,字段名与连接属性对应、与表名对应、属于关联字段的字段名有特定属性,从信息配置表中,查询出与查询组对应的连接属性对应、且与查询组包含的表名对应、属于关联字段的字段名,将该属于关联字段的字段名作为该行记录集合对应的关联字段名;
S203、针对所述至少两个行记录集合中的每个行记录,分别根据行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值;
S204、对所述至少两个行记录集合进行比较,判断是否有属性值相等的行记录;
S205、如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合;
S206、判断是否还有属性值相等的行记录;
S207、如果有,返回到步骤S205将属性值相等的行记录拼接为一行记录的步骤;
S208、如果没有,返回获得的合并行记录集合。
在该实施例中,一个查询组生成一条子查询指令,当查询组包含多个表名时,生成的是连接查询指令(如SQL中的join查询指令),当查询组包含一个表名时,生成的是针对单表的查询指令,从而使得一个大的连接查询可以根据信息配置表的连接属性,拆分为可以是单表查询、也可以是连接查询的至少两个子查询,可见,通过对信息配置表的连接属性的设置,可以达到对子查询划分的控制,对于可连接的表中,单表数据量小、表数量多时,可以适当使一部分子查询为少量的连接查询,以提高查询效率。
另外,考虑到实际上同样的数据会出现反复被查询的情形,可以将历史查询的结果进行复用,以提高查询速度。例如,参见图3,本发明又一可能的实施方式可以包括:
S300.a、获得需返回的字段名及查询条件;
S300.b、根据预先保存的信息配置表,查询需返回的字段名对应的表名、该表名对应的连接属性,其中,所述预先保存的信息配置表用于记录字段名,与字段名对应的表名,与表名对应的连接属性、其中,按照预设的关联条件,至少存在两个互相不关联的连接属性;
S300.c、按照互相关联的为一组、不关联的各自为单独一组的方式,将查询出的连接属性进行分组、且将需返回的字段名、及查询条件分到与之对应的连接属性的组中,获得与连接属性对应的至少两个查询组;
S300.d1、针对每个查询组,判断该查询组是否与缓存***中的历史查询组相匹配,匹配条件为该查询组对应的连接属性与该历史查询组对应的连接属性互相关联、且该查询组包含的查询条件与该历史查询组包含的查询条件相同、且该查询组包含的字段名为该历史查询组包含的字段名的子集;
S300.d2、如果匹配,从所述缓存***中取出与该查询组匹配的历史查询组对应的行记录集合中与需返回的字段名有映射关系的字段值的集合,作为该查询组对应的行记录集合,进入步骤S302所述获取至少两个行记录集合分别对应的关联字段名的步骤;
S300.d3、如果不匹配,进入S300.d4根据查询指令生成规则,对应该查询组生成至少一条子查询指令的步骤,且将生成该子查询指令的查询组与执行所述子查询指令之后相应获得的行记录集合对应,并将该查询组对应的行记录集合保存于所述缓存***;
S300.d4、根据查询指令生成规则,对应该查询组生成至少一条子查询指令;
S300.e、执行所述子查询指令,获得子查询结果;
S301、为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合;
S302、获取所述至少两个行记录集合分别对应的关联字段名;
S303、针对所述至少两个行记录集合中的每个行记录,分别根据该行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值;
S304、对所述至少两个行记录集合进行比较,判断是否有属性值相等的行记录;
S305、如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合;
S306、判断是否还有属性值相等的行记录;
S307、如果有,返回到步骤S305将属性值相等的行记录拼接为一行记录的步骤;
S308、如果没有,返回获得的合并行记录集合。
为了便于对子查询指令与历史查询指令进行匹配,可以将查询组的连接属性、查询条件、及被查询字段名,按照预定顺序连接,之间被特定分隔符如“~^”分隔,生成代表查询组缓存属性的字符串,而历史查询组的缓存属性采取同样的生成方法,所以在判断查询组是否与缓存***中的历史查询组相匹配时,只需判断该查询组的缓存属性字符串是否存在于缓存***中(需返回的字段完全相同)或者为某个历史缓存组的缓存字符串的一部分(需返回的字段为历史查询组的需返回的字段之子集)。当然,该匹配方法并不用于限制本发明,只要对查询组的缓存属性与历史查询组的缓存属性按照上述的匹配条件进行匹配均在本发明的保护范围之内。
然而,对于时间太过久远的历史查询,由于数据库的不断更新,可能该历史查询的结果不再适合复用,因此,为了保证查询结果的正确性,本发明对历史查询组的行记录集合的可复用的期限进行了一定的约束,例如,上述实施例中的所述如果匹配,从所述缓存***中取出与该查询组匹配的历史查询组对应的行记录集合的具体实现可以为:
如果匹配,且该历史查询组的缓存期限未过期,从所述缓存***中取出该历史查询组对应的行记录集合中与需返回的字段名有映射关系的字段值的集合,作为该查询组对应的行记录集合,进入所述获取至少两个行记录集合分别对应的关联字段名的步骤;
如果匹配,且该历史查询组的缓存期限已过期,进入根据查询指令生成规则,对应该查询组生成至少一条子查询指令的步骤,且将生成该子查询指令的查询组与执行该子查询指令之后相应获得的行记录集合对应,并将该查询组对应的行记录集合保存于所述缓存***。
下面,再对本发明实施例的可能的应用场景进行详细说明,例如:本发明可以应用于服务器端,上述实施例所述需返回的字段名及查询条件可以从客户端获取,例如,可以在服务器端接收到客户端的连接查询请求消息后,从所述连接查询请求消息中解析出需返回的字段名及查询条件,进而,应用本发明上述方法实施例根据需返回的字段名及查询条件进行处理,最终返回获得的合并行记录集合到客户端,或者,根据客户端指定的输出格式,将所述合并行记录集合按照指定的输出格式组织,获得指定输出格式文件,再将指定输出格式文件返回到客户端。
另外,为了提高查询速度,本发明提出可以利用多线程或多进程的方式实现至少两个子查询的并行执行,例如:在获得至少两个查询组之后,还可以包括:为每个查询组对应分配一个线程,所述线程用于执行所述获得该查询组对应的行记录集合之前的任意步骤,所述线程之间为并行执行。
考虑到大量行记录的比较及合并的速度非常慢,对连接查询效果有影响,还可以预先设置行记录数量之阈值,在根据查询指令生成规则,对应一个查询组生成至少一条子查询指令时,将该行记录数量之阈值作为子查询指令中用于限制返回行数的参数,例如以“TOP n”作为限制返回行数的参数,n为行记录阈值,这样,执行该子查询指令后,返回的子查询结果中的记录数的最大值就是该阀值。
另外,受响应时间及网络传输的影响,一次查询的数据量过大可能无法正常得到查询返回的行记录,针对这一问题,本发明提出:
线程一次读取表中的所有数据后,执行子查询指令进行查询;
或者,
线程分次读取表中的预设数量行记录,逐次执行子查询指令进行查询。
还需要补充的是,实际上,连接查询有内连接、左连接、右连接等几种情形,上述实施例可以视为实现了内连接,在上述实施例的基础上,进行一定的补充,还可实现左连接及右连接,例如,可以获取行记录集合各自的权重,再根据各个行记录集合权重的大小,确定各个行记录集合中属性值相等的行记录的连接顺序。其中,获取行记录集合的权重的方式,可以根据使用者输入临时获取,也可以预先为所述信息配置表中的连接属性设置权重,在获取行记录集合各自的权重时,从信息配置表中,查询出行记录集合对应的连接属性的权重,得到行记录集合的权重。例如:分别为不同连接属性设置的任意两个权重之间可表示为:小于关系为左连接,大于关系为右连接,等于关系为内连接。那么在各个行记录集合中属性值相等的行记录进行拼接时,如果是按权重从小到大的顺序拼接,则表示左连接,反之表示右连接。
具体地,在上述实施例的基础上,实现左连接或右连接的具体实现可以为:
获取所述至少两个行记录集合各自的权重;
按照权重大小,排序所述至少两个行记录集合的位置;
如果有属性值相等的行记录,将在非第一位置的行记录集合中的所述属性值相等的行记录,按排序顺序拼接在第一位置的行记录集合中所述属性值相等的行记录的行尾成为一行,加入合并行记录集合。
而且,还可以包括:如果所述至少两个行记录集合存在属性值不相等的行记录,将属性值不相等的行记录,作为新行记录***到合并行记录集合的结尾。
可见,权重为从小到大排序,或者从大到小排序,可以实现左连接或者右连接中的一种。
还需要说明的是,本文所述的查询条件,可以包括AND查询条件,还可以是包括各种运算符的查询条件,运算符包括如:等于(=)、不等于(!=)、小于(<)、小于等于(<=)、大于(>)、大于等于(>=)、区间(betweenand)、集合(IN)、空值(IS NULL)等,在本发明中并不进行限制。
参见图4所示,为本发明提供的一种连接查询装置的实施例的结构示意图,如图所示,该装置可以包括:
子查询单元401:可以用于为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得与所述至少两个子查询结果相应的至少两个行记录集合;
获取关联字段单元402:可以用于获取所述至少两个行记录集合分别对应的关联字段名;
属性生成单元403:可以用于针对所述至少两个行记录集合中的每个行记录,分别根据行记录所在行记录集合对应的关联字段名有映射关系的字段值,生成行记录的属性值;
比较单元404:可以用于对所述至少两个行记录集合进行比较,判断是否有属性值相等的行记录;
合并单元405:可以用于如果有属性值相等的行记录,将属性值相等的行记录拼接为一行记录,加入合并行记录集合,判断是否还有属性值相等的行记录,如果有,触发合并单元405重新执行,如果没有,触发返回单元406执行;
返回单元406:可以用于返回获得的合并行记录集合。
实施本发明装置,由于子查询单元401为至少两个子查询结果的每个行记录中的字段值,建立与字段名的映射关系,获得至少两个行记录集合,因此,比较单元404所处理的至少两个行记录集合中的每个行记录均为字段值与字段名有映射关系的独立记录,不是固定的表的结构,不存在格式要求,而且,属性生成单元403从获取关联字段单元402获取每个行记录集合各自对应的关联字段名,针对每个行记录集合中的每个行记录,分别根据行记录中与关联字段名有映射关系的字段值,生成每个行记录的属性值,因此,比较单元404及合并单元405不需要根据固定列的字段值进行比较及合并,而是根据行记录的属性值,对至少两个行记录集合进行比较及合并,因此,本发明的装置是一种对子查询结果没有格式要求的、可以直接根据指定关联字段的字段值进行比较及合并的连接查询装置,可以提高连接查询的可扩展性。
为了降低连接查询调用的复杂度,在本发明装置一实施例中,该装置还可以包括:
获取输入单元400.a:可以用于获得需返回的字段名及查询条件;
配置查询单元400.b:可以用于根据预先保存的信息配置表,查询需返回的字段名对应的表名、该表名对应的连接属性,其中,所述预先保存的信息配置表用于记录字段名,与字段名对应的表名,与表名对应的连接属性、其中,按照预设的关联条件,至少存在两个互相不关联的连接属性;
分组单元400.c:可以用于按照互相关联的为一组、不关联的各自为单独一组的方式,将查询出的连接属性进行分组、且将需返回的字段名、及查询条件分到与之对应的连接属性的组中,获得与连接属性对应的至少两个查询组;
子查询生成单元400.d:可以用于针对每个查询组,根据查询指令生成规则,对应该查询组生成至少一条子查询指令;执行所述子查询指令,获得子查询结果。
在该装置实施例的一具体实现方式中,所述子查询生成单元400.d:可以用于针对每个查询组,根据单表查询的查询指令生成规则,对应该查询组中的每个表名,各生成一条子查询指令;其中,所述单表查询的查询指令生成规则包括:该查询组中对应该表名的字段名作为该条子查询指令的被查询字段、且该查询组中对应该表名的字段名的查询条件作为该条子查询指令的查询条件,该表名为被查询的表。
或者,在该装置实施例的另一具体实现方式中,所述子查询生成单元400.d:可以用于针对每个查询组,如果该查询组包含多个表名,根据多表查询指令生成规则生成一条子查询指令,如果该查询组包含一个表名,根据单表查询指令生成规则生成一条子查询指令;其中,所述多表查询的查询指令生成规则包括:该查询组包含的字段名,作为该条子查询指令的被查询字段;该查询组包含的查询条件,作为该条子查询指令的查询条件;该查询组包含的表名,作为该条子查询指令的被连接的表;该查询组包含的、且与该查询组对应的连接属性对应的、且属于关联字段的字段名,作为该条子查询指令的被连接的表的关联字段,其中,属于关联字段的字段名在信息配置表中有特定属性;所述单表查询的查询指令生成规则包括:该查询组包含的字段名,作为该条子查询指令的被查询字段;该查询组包含的查询条件,作为该条子查询指令的查询条件;该查询组包含的表名,作为该条子查询指令的被查询的表。
在本发明一提高查询速度的优选实施方式中,该装置的子查询生成单元400.d:还可以用于针对每个查询组,在所述根据查询指令生成规则,对应该查询组生成至少一条子查询指令之前,判断该查询组是否与缓存***中的历史查询组相匹配,匹配条件为该查询组对应的连接属性与该历史查询组对应的连接属性互相关联、且该查询组包含的查询条件与该历史查询组包含的查询条件相同、且该查询组包含的字段名为该历史查询组包含的字段名的子集;如果匹配,从所述缓存***中取出与该查询组匹配的历史查询组对应的行记录集合中与需返回的字段名有映射关系的字段值的集合,作为该查询组对应的行记录集合,并触发所述获取关联字段单元402执行;如果不匹配,进入所述根据查询指令生成规则,对应该查询组生成至少一条子查询指令的步骤,且将生成该子查询指令的查询组与执行该子查询指令之后相应获得的行记录集合对应,并将该查询组对应的行记录集合保存于所述缓存***。
为了避免使用过期的查询结果,保证历史查询的查询结果的可用性,该装置的子查询生成单元400.d:具体可以用于如果匹配,且该历史查询组的缓存期限未过期,从所述缓存***中取出该历史查询组对应的行记录集合中与需返回的字段名有映射关系的字段值的集合,作为该查询组对应的行记录集合,并触发所述获取关联字段单元402执行;如果匹配,且该历史查询组的缓存期限已过期,进入所述根据查询指令生成规则,对应该查询组生成至少一条子查询指令的步骤,且将生成该子查询指令的查询组与执行该子查询指令之后相应获得的行记录集合对应,并将该查询组对应的行记录集合保存于所述缓存***。
为了进一步降低调用连接查询的复杂度,其中所述获取关联字段单元402:可以用于查询出信息配置表中,与该查询组对应的连接属性对应、且与该查询组包含的表名对应、属于关联字段的字段名,以该属于关联字段的字段名作为该行记录集合对应的关联字段名,其中,属于关联字段的字段名在信息配置表中有特定属性。
结合该装置实施例可以实施的应用场景,该装置可以实施于服务器端,所述获取输入单元400.a:可以用于从客户端获取需返回的字段名及查询条件,具体地,例如,在服务器端接收到客户端的连接查询请求后,从所述连接查询请求消息中解析出所述字段名集合及查询条件;
所述返回单元406:可以用于将获得的合并行记录集合返回到所述客户端,或者,根据客户端指定的输出格式,先将所述合并行记录集合按照指定的输出格式组织,获得指定输出格式文件,再将指定输出格式文件返回到客户端。
考虑到大量行记录的比较及合并的速度非常慢,对连接查询效果有影响,该装置的分组单元400.c:还可以用于为所述线程设置行记录数量之阈值;如果线程用于执行子查询指令,在查询所返回的行记录的数量超过行记录阈值时,使所述线程根据行记录数量之阈值,从返回的行记录中选取在行记录阀值内的记录加入行记录集合。
另外,在上述实施例的基础上,进行一定的补充,还可实现左连接及右连接,例如,该装置的合并单元405:还可以用于获取所述至少两个行记录集合各自的权重;按照权重大小,排序所述至少两个行记录集合的位置,如果有属性值相等的行记录,在将属性值相等的行记录拼接为一行记录时,将在非第一位置的行记录集合中的所述属性值相等的行记录,按排序顺序拼接在第一位置的行记录集合中所述属性值相等的行记录的行尾成为一行,加入合并行记录集合。
而且,所述合并单元405:还可以用于如果所述至少两个行记录集合存在属性值不相等的行记录,将属性值不相等的行记录,作为新行记录***到合并行记录集合的结尾。
其中,所述合并单元405:可以用于从所述至少两个行记录集合各自对应的连接属性中,提取出各自的权重,其中,所述信息配置表中的连接属性具有权重,互相关联的连接属性具有相同的权重。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如媒体网关等网络通信设备,等等)执行本发明各个实施例或者实施例的某些部分所述的方法。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
而且,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (28)
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所述的装置,其特征在于,所述合并单元:用于从所述至少两个行记录集合各自对应的连接属性中,提取出各自的权重,其中,信息配置表中的连接属性具有权重,互相关联的连接属性具有相同的权重。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310192991.3A CN104182405B (zh) | 2013-05-22 | 2013-05-22 | 一种连接查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310192991.3A CN104182405B (zh) | 2013-05-22 | 2013-05-22 | 一种连接查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104182405A true CN104182405A (zh) | 2014-12-03 |
CN104182405B CN104182405B (zh) | 2017-05-24 |
Family
ID=51963457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310192991.3A Active CN104182405B (zh) | 2013-05-22 | 2013-05-22 | 一种连接查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104182405B (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572897A (zh) * | 2014-12-25 | 2015-04-29 | 北京京东尚科信息技术有限公司 | 提供多语言信息的方法和*** |
CN106326309A (zh) * | 2015-07-03 | 2017-01-11 | 阿里巴巴集团控股有限公司 | 一种数据查询方法和装置 |
CN106708845A (zh) * | 2015-11-12 | 2017-05-24 | 阿里巴巴集团控股有限公司 | 一种互联网账号的数据处理方法及装置 |
CN106708873A (zh) * | 2015-11-16 | 2017-05-24 | 北京国双科技有限公司 | 数据整合方法和装置 |
CN107145549A (zh) * | 2017-04-27 | 2017-09-08 | 深圳智高点知识产权运营有限公司 | 一种数据库缓存控制方法以及*** |
CN107220251A (zh) * | 2016-03-21 | 2017-09-29 | 阿里巴巴集团控股有限公司 | 生成描述信息的方法及装置 |
CN107729500A (zh) * | 2017-10-20 | 2018-02-23 | 锐捷网络股份有限公司 | 一种联机分析处理的数据处理方法、装置及后台设备 |
CN108509637A (zh) * | 2018-04-10 | 2018-09-07 | 口碑(上海)信息技术有限公司 | 数据表关联查询方法及装置 |
CN108563736A (zh) * | 2018-04-10 | 2018-09-21 | 口碑(上海)信息技术有限公司 | 基于数据特征查询数据的方法及装置 |
CN109582693A (zh) * | 2018-11-26 | 2019-04-05 | 成都四方伟业软件股份有限公司 | 基于web的数据逻辑表达式处理方法及装置 |
CN109800273A (zh) * | 2018-12-03 | 2019-05-24 | 北京明略软件***有限公司 | 一种数据处理的方法、装置、计算机存储介质及终端 |
WO2019100619A1 (zh) * | 2017-11-21 | 2019-05-31 | 平安科技(深圳)有限公司 | 电子装置、多表关联查询的方法、***及存储介质 |
CN109947804A (zh) * | 2019-03-20 | 2019-06-28 | 上海达梦数据库有限公司 | 数据集合查询的优化方法、装置、服务器和存储介质 |
CN109992630A (zh) * | 2019-03-20 | 2019-07-09 | 跬云(上海)信息科技有限公司 | 数据模型匹配方法和装置 |
CN111459946A (zh) * | 2020-04-08 | 2020-07-28 | 深圳市今天国际物流技术股份有限公司 | 一种数据表快速汇总方法、装置、计算机设备及存储介质 |
CN111611245A (zh) * | 2020-05-21 | 2020-09-01 | 第四范式(北京)技术有限公司 | 处理数据表的方法和*** |
CN110019212B (zh) * | 2017-11-29 | 2021-06-18 | 杭州海康威视数字技术股份有限公司 | 一种数据处理方法、装置及数据库服务器 |
CN113255315A (zh) * | 2021-07-19 | 2021-08-13 | 杭州天谷信息科技有限公司 | 一种配置和生成证据链的方法以及*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6078926A (en) * | 1997-12-18 | 2000-06-20 | Persistence Software, Inc. | Method and apparatus for performing multi-class object fetch in a database management system |
CN1556482A (zh) * | 2003-12-31 | 2004-12-22 | 中兴通讯股份有限公司 | 一种用于实现数据库多表查询的数据处理方法 |
-
2013
- 2013-05-22 CN CN201310192991.3A patent/CN104182405B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6078926A (en) * | 1997-12-18 | 2000-06-20 | Persistence Software, Inc. | Method and apparatus for performing multi-class object fetch in a database management system |
CN1556482A (zh) * | 2003-12-31 | 2004-12-22 | 中兴通讯股份有限公司 | 一种用于实现数据库多表查询的数据处理方法 |
Non-Patent Citations (2)
Title |
---|
张杨: "分布式数据库查询优化算法的研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
邹先霞: "事务处理流处理的若干关键技术问题研究", 《中国博士学位论文全文数据库 信息科技辑》 * |
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572897A (zh) * | 2014-12-25 | 2015-04-29 | 北京京东尚科信息技术有限公司 | 提供多语言信息的方法和*** |
CN104572897B (zh) * | 2014-12-25 | 2017-11-28 | 北京京东尚科信息技术有限公司 | 提供多语言信息的方法和*** |
CN106326309A (zh) * | 2015-07-03 | 2017-01-11 | 阿里巴巴集团控股有限公司 | 一种数据查询方法和装置 |
CN106326309B (zh) * | 2015-07-03 | 2020-02-21 | 阿里巴巴集团控股有限公司 | 一种数据查询方法和装置 |
CN106708845A (zh) * | 2015-11-12 | 2017-05-24 | 阿里巴巴集团控股有限公司 | 一种互联网账号的数据处理方法及装置 |
CN106708873A (zh) * | 2015-11-16 | 2017-05-24 | 北京国双科技有限公司 | 数据整合方法和装置 |
CN107220251A (zh) * | 2016-03-21 | 2017-09-29 | 阿里巴巴集团控股有限公司 | 生成描述信息的方法及装置 |
CN107145549A (zh) * | 2017-04-27 | 2017-09-08 | 深圳智高点知识产权运营有限公司 | 一种数据库缓存控制方法以及*** |
CN107145549B (zh) * | 2017-04-27 | 2020-01-14 | 深圳智高点知识产权运营有限公司 | 一种数据库缓存控制方法以及*** |
CN107729500A (zh) * | 2017-10-20 | 2018-02-23 | 锐捷网络股份有限公司 | 一种联机分析处理的数据处理方法、装置及后台设备 |
WO2019100619A1 (zh) * | 2017-11-21 | 2019-05-31 | 平安科技(深圳)有限公司 | 电子装置、多表关联查询的方法、***及存储介质 |
CN110019212B (zh) * | 2017-11-29 | 2021-06-18 | 杭州海康威视数字技术股份有限公司 | 一种数据处理方法、装置及数据库服务器 |
CN108509637A (zh) * | 2018-04-10 | 2018-09-07 | 口碑(上海)信息技术有限公司 | 数据表关联查询方法及装置 |
CN108563736A (zh) * | 2018-04-10 | 2018-09-21 | 口碑(上海)信息技术有限公司 | 基于数据特征查询数据的方法及装置 |
CN109582693A (zh) * | 2018-11-26 | 2019-04-05 | 成都四方伟业软件股份有限公司 | 基于web的数据逻辑表达式处理方法及装置 |
CN109800273A (zh) * | 2018-12-03 | 2019-05-24 | 北京明略软件***有限公司 | 一种数据处理的方法、装置、计算机存储介质及终端 |
CN109992630B (zh) * | 2019-03-20 | 2021-04-30 | 跬云(上海)信息科技有限公司 | 数据模型匹配方法和装置 |
CN109947804B (zh) * | 2019-03-20 | 2021-04-06 | 上海达梦数据库有限公司 | 数据集合查询的优化方法、装置、服务器和存储介质 |
CN109992630A (zh) * | 2019-03-20 | 2019-07-09 | 跬云(上海)信息科技有限公司 | 数据模型匹配方法和装置 |
CN109947804A (zh) * | 2019-03-20 | 2019-06-28 | 上海达梦数据库有限公司 | 数据集合查询的优化方法、装置、服务器和存储介质 |
CN111459946A (zh) * | 2020-04-08 | 2020-07-28 | 深圳市今天国际物流技术股份有限公司 | 一种数据表快速汇总方法、装置、计算机设备及存储介质 |
CN111459946B (zh) * | 2020-04-08 | 2023-03-21 | 深圳市今天国际物流技术股份有限公司 | 一种数据表快速汇总方法、装置、计算机设备及存储介质 |
CN111611245A (zh) * | 2020-05-21 | 2020-09-01 | 第四范式(北京)技术有限公司 | 处理数据表的方法和*** |
CN111611245B (zh) * | 2020-05-21 | 2023-09-05 | 第四范式(北京)技术有限公司 | 处理数据表的方法和*** |
CN113255315A (zh) * | 2021-07-19 | 2021-08-13 | 杭州天谷信息科技有限公司 | 一种配置和生成证据链的方法以及*** |
Also Published As
Publication number | Publication date |
---|---|
CN104182405B (zh) | 2017-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104182405A (zh) | 一种连接查询方法及装置 | |
US11755575B2 (en) | Processing database queries using format conversion | |
US5895465A (en) | Heuristic co-identification of objects across heterogeneous information sources | |
JP6338817B2 (ja) | データベースミドルウェアを用いたデータ管理システム及びその方法 | |
US20180039692A1 (en) | Information Query Method And Device | |
CN102567329B (zh) | 一种数据查询方法及*** | |
CN102270225A (zh) | 数据变更日志监控方法和数据变更日志监控装置 | |
AU2005239366A1 (en) | Partial query caching | |
US20150120711A1 (en) | Scenario based insights into structure data | |
CN102725757A (zh) | 上下文查询 | |
CN102902763B (zh) | 关联、检索信息处理数据和处理信息任务的方法及装置 | |
CN103810224A (zh) | 信息持久化和查询方法及装置 | |
CN104268298A (zh) | 一种创建数据库索引及其查询的方法 | |
CN105164673A (zh) | 跨数据库和文件***的查询一体化 | |
CN108319608A (zh) | 访问日志存储查询的方法、装置及*** | |
CN103177046B (zh) | 一种基于行存储数据库的数据处理方法和设备 | |
US9031930B2 (en) | Data browser for group-by data access | |
CN102750384A (zh) | 从多数据库引擎获取数据的装置和方法 | |
CN107346317A (zh) | 一种数据查询方法和装置 | |
US7680787B2 (en) | Database query generation method and system | |
CN114064707A (zh) | 一种用于数据虚拟化服务器的数据查询方法、装置及存储介质 | |
KR101955376B1 (ko) | 비공유 아키텍처 기반의 분산 스트림 처리 엔진에서 관계형 질의를 처리하는 방법, 이를 수행하기 위한 기록 매체 및 장치 | |
CN105677745A (zh) | 一种通用高效自助数据查询***及实现方法 | |
CN112417225A (zh) | 一种多源异构数据的联合查询方法与*** | |
Al-Kateb et al. | Adding a temporal dimension to the TPC-H benchmark |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20211115 Address after: Room 4-57-02, commercial office building 4, plot jlh603-d03, Greenland International Expo City, Honggutan District, Nanchang City, Jiangxi Province Patentee after: Alibaba (Jiangxi) Co., Ltd Address before: P.O. Box 847, 4th floor, capital building, Grand Cayman, British Cayman Islands Patentee before: Alibaba Group Holdings Limited |