题主这个问题不存在简单的回答,需要具体情况具体分析解决。 多表汇总跟单表汇总本质上是一样的,基本方法无非就是使用聚合函数(通常需要配合group by子句一起使用)来检索出汇总信息。
多表汇总一般需要使用连接与联合这两种手段将来自不同数据表的数据合并在一起。对于多表连接,大家需要特别注意它的笛卡尔乘积输出规则所导致的记录行数增大效应,否则汇总出来的数字很可能就会不正确!请注意笛卡尔乘积输出规则对于任何类型的表间连接方式的影响作用都是一样的,不论它是内连接、外连接、一对多或者多对多关系等等。
例如A表ID=1的记录有2行,B表ID=1的记录有3行,那么A、B两表基于字段ID连接后,ID=1的记录行数将输出2×3=6行,直接对连接后得到的记录集实施汇总显然就会不正确。 那么SQL多表汇总如何规避"笛卡尔"乘积输出规则的影响呢?
一是先对单表实施汇总,然后才进行连接;又或者在确保至少一方表是唯一的情况下实施连接,因为1乘以任何数还是任何数,"笛卡尔"乘积输出规则不会令到连接后的记录集行数增多。 具体的多表汇总方法需要考虑的问题很多,当然不止上述因素,还是那句话需要具体问题具体分析。