当前位置: 移动技术网 > IT编程>开发语言>.net > 多表查询中对应关系的汇总规则

多表查询中对应关系的汇总规则

2020年07月30日  | 移动技术网IT编程  | 我要评论

多表查询

通过不同表中具有相同意义的关键字段,将多个表进行横向连接,查询不同表中的字段信息。
:连接两表时,用于连接的字段称为关键字段。

连接方式

  • 内连接和外连接(左连接和右连接)

决定多表连接结果的三个属性

  • 方向性:在外连接中,写在前面的表为左表,写在后面的表为右表
  • 主附关系:主表要出所有的数据范围,附表与主表无匹配项时标记为null,内连接时无主附表之分
  • 对应关系:关键字段中有重复值的表为多表,没有重复值的表为一表,它决定连接后的行数是两表对应项乘积的结果

对应关系

由于关键字段中有重复值的表为多表,没有重复值的表为一表,而在一张表中主键是没有重复值的,有重复值的是非主键字段,所以一对一,多对多和一对多的三种对应关系又可分别称为:

  • 一对一:主键连主键
  • 多对多:非主键连非主键
  • 一对多:主键连非主键

一对一

一对一对应关系在实际应用中是最不可能出现的,因为主键是记录单位,表中所有的字段都是围绕主键进行的,所以当两表的主键相同时是可以放在一个表中的。如下面的两张表,当用学员ID进行连接时,是一对一的对应关系,这时两表完全可以合并成一张表。

学员ID 学员姓名 手机号码
1 赵大 13356781234
2 王二 13256781235
3 张三 13156781236
学员ID 学员性别
1
2
3

注意: 一对一的连接关系一旦出现就要检查是否合理,此时需要考虑是物理层级的一对一还是真正业务逻辑上的一对一。

若是物理层级上的一对一,且没有重复值,此时需要考虑能不能用一对一的对应关系,如下面新产品上市时的订单表和客户表(用客户ID进行连接),订单表上每一笔订单对应一个客户ID,客户表上客户ID是主键也没有重复值,此时就是一对一的对应关系,但这是假性的一对一,因为随着产品的上市时间增加,一个客户可能会产生多个订单,这样客户ID就有重复值,不能作为订单表的主键,此时订单表和客户表的连接就是多对一的对应关系。
因此,出现一对一的对应关系时,不能只看当前时点的数据,而需要结合实际的业务逻辑进行判断。

订单ID 客户ID 订单金额
1 a 100
2 b 100
3 c 100
客户ID 客户姓名
a 赵大
b 王二
c 张三

多对多

多对多对应关系在实际应用中可能出现,但是不能用,因为汇总时会出现重复项,如下面的订单表和订单详情表:
(订单表)

订单ID 客户ID 订单金额
1 a 100
2 a 100
3 b 100
总计 300

(订单详情表)

订单ID 产品ID 客户ID 产品金额
1 a-1 a 60
1 a-2 a 40
2 a-3 a 100
3 b-1 b 50
3 b-2 b 50
总计 300

当用客户ID进行连接时,就是多对多的对应关系,连接结果如下:

订单ID 客户ID 订单金额 订单ID 产品ID 客户ID 产品金额
1 a 100 1 a-1 a 60
1 a 100 1 a-2 a 40
1 a 100 2 a-3 a 100
2 a 100 1 a-1 a 60
2 a 100 1 a-2 a 40
2 a 100 2 a-3 a 100
3 b 100 3 b-1 b 50
3 b 100 3 b-2 b 50
总计 800 总计 500

当只考虑连接时,结果是没问题的。但结合到实际的业务场景中,连接的最终目的是为了汇总。而只有连续性的数值才能当度量进行汇总,所以只有订单金额和产品金额能进行汇总。连接后订单金额汇总值是800,产品金额汇总值是500,而连接前订单金额和产品金额的汇总值均为300,这时就会发现连接后的度量会比连接前的度量大,因为连接时都会在另一个表的重复项下翻倍,所以结果都不正确。

一对多

一对多对应关系是正确的连接关系,但也不是所有的汇总值都正确。例如,将上面的订单表和订单详情表的订单ID进行连接时,就是一对多的对应关系,连接结果如下:

订单ID 客户ID 订单金额 订单ID 产品ID 客户ID 产品金额
1 a 100 1 a-1 a 60
1 a 100 1 a-2 a 40
2 a 100 2 a-3 a 100
3 b 100 3 b-1 b 50
3 b 100 3 b-2 b 50
总计 500 总计 300

此时,一表中的订单金额汇总值不正确,但多表中的产品金额汇总值是正确的。故在一对多的对应关系下,只能多表出度量(连续型的数值),一表只能提供维度

本文地址:https://blog.csdn.net/qq_44684133/article/details/107663919

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网