12.5 查询模板:数据源

在查询中可使用单数据源或者多数据源,涉及多数据源时可从多个模板中获取数据

1.单数据源

所谓单数据源就是从一个模板中获取数据,譬如,从《商品档案》(图1)中获取,从《采购单》明细中获取数据,这些都是单数据源
图1:单数据源

2.多数据源

所谓多数据源是指从多个模板中获取数据,譬如,同时从《商品档案》和《销售单》中获取数据(图2),使用多数据源时有3个注意的地方:
①关联关系,有3种关联关系:交集、左关联、右关联。单击“左关联”可选择其他的关系关系,关联关系必须设置;
图2:多数据源
为了能够更好的理解关联关系,我们用一个简单的例子来看一下(图3),有2个数据源分别为B和C
图3:数据源B和数据源C
  • 交集
当数据源B交集数据源C时,得到的结果为(图4),交集时结果为数据源B和数据源C都拥有的数据
图4:交集的结果
  • 左关联
当数据源B左关联数据源C时,得到的结果为(图5),左关联时结果中会显示左侧数据源B的所有数据,根据数据源B的数据关联显示数据源C的数据
图5:左关联的结果
  • 右关联
当数据源B右关联数据源C时,得到的结果为(图6),右关联时结果中会显示右侧数据源C的所有数据,根据数据源C的数据关联显示数据源B的数据,数据源B右关联数据源C与数据源C左关联数据源B的结果相同。
图6:右关联的结果
②数据表关联,设置好关联关系后,需要将2个模板的关联的数据项做好对应关系,可能只有一个数据项,也可能会存在多个数据项。譬如(图2)中的数据表关联是《商品档案》“商品编号”数据项的值与《销售单》明细“商品编号”数据项的值相同时。
③数据列可从多个数据源中获取数据,即使是相同的数据项,从不同的数据源获取时结果也不同,譬如(图2)中《商品档案》左关联《销售单》,设置数据列时(图7)“商品编号”选取了《商品档案》的“商品编号”,并没有选择《销售单》的“商品编号”为什么呢?因为《商品档案》中会显示所有的商品,而《销售单》中只有存在有销售记录的商品,没有销售记录的商品不会显示,这样设置(图7)才能将所有的商品(包含没有销售记录商品)的销售记录都显示出来。
图7:多数据源时的数据列

3.数据源的过滤条件

使用多数据源时,数据源模板中的数据量可能会很大,为了提高查询的效率,可先针对单个数据源进行过滤再做关联查询,譬如,“按照年月统计所有商品的销售情况”时,先选择数据源“销售单.明细”显示过滤条件,设置过滤条件先针对数据源过滤再进行多数据源的关联。在数据源的过滤条件中可调用“过滤条件”选项卡中的自定义参数。
图8:数据源的过滤条件

4.数据源的关联条件

当数据源中有多个数据源但是多个数据源之间不一定存在关联的数据项,但是需要从多个数据源中联合进行查询时,可以使用数据源的关联条件,譬如(图9),不填写“数据表关联”,在“关联条件”中填写表达式,表达式中可调用2个数据源的数据项进行筛选;
图9:数据源的关联条件

5.多数据源的使用注意事项

多表连接的原理:取多张表的笛卡尔乘积, 将结果写入一个临时表,再从临时表中查询 符合关联条件的数据进行返回。譬如:人与身份证是一对一关系,班级与学生是一对多关系,而学生和课程是多对多关系
①多对多关系不能进行关联。多对多关系下,直接进行关联会产生重复数据, 用统计函数(求和,计数)会导致结果 翻倍。
②一对多关系要谨慎使用统计函数。一对多关系下,使用关联后,对一端进行合计 和计数会导致计算结果翻倍。多端可以正常使用 统计函数。
③参与运算的集合越小,效率越高。过滤条件优先写在数据源过滤条件里面。
④关联条件建立索引。关联条件会参与匹配运算,必须建立索引。
⑤优先使用交集,再考虑左右关联。数据库执行优化引擎在符合条件时会将左右连接转换为交集,所以能使用交集的情况下优先用交集。
⑥当有多个数据源时,数据源的关联关系应该是同向的,比如 数据源A 左关联 数据源B 左关联 数据源C 或者 数据源A 右关联 数据源B 右关联 数据源C ,同为左关联或者右关联,而不能为 数据源A 左关联 数据源B 右关联 数据源C
2022-05-18
3023
Baidu
map