美文网首页
避免产生笛卡尔积

避免产生笛卡尔积

作者: 杨晓兰esay | 来源:发表于2016-12-14 20:22 被阅读0次

在写SQL的时候,复杂到一定程度不可避免的会出现多个连结,此时特别容易产生笛卡尔积。若外层的聚合函数是count(distinct col)类型,倒没有关系,因为已经去重了。但若外层的聚合函数是sum类型的,那么就会产生重复计算。
解决办法就是:在脑袋里构思,形成新的主键,并将新的主键应用到on的条件中。
保证每一次连结都到了最细粒度上。
例如: deal和poi是 * ——*的映射关系,在join 交易表时,条件则不能只写deal,加设1个deal有4个poi,通过交易表已经得出了这个deal的交易额。因为deal在表中有4条记录,分别对应4个poi,再在外层sum交易额, 则会计算4倍deal的交易额。
解决办法是,join on的条件同时锁定 Deal和poi 这样计算的交易额是每个deal在每个poi的交易额,没有重复的情况。在外层sum则不会产生重复。

相关文章

  • 避免产生笛卡尔积

    在写SQL的时候,复杂到一定程度不可避免的会出现多个连结,此时特别容易产生笛卡尔积。若外层的聚合函数是count(...

  • 五种连接查询 & pymysql

    cross jion 交叉查询 尽量的避免使用交叉查询,因为会产生笛卡尔积现象 SELECT *from emp,...

  • mysql:笛卡尔积

    1.多表查询 注意:在实际运行环境下,应避免使用笛卡尔积 可以看到下面笛卡尔积不合理的地方 为了避免这种情况的发生...

  • Oracle学习(2)

    多表查询: 会出现笛卡尔积,为了避免出现笛卡尔积,要使用where 语句对字段进行关联操作 左右连接 (+)在=左...

  • 多表查询

    多表查询时,容易产生笛卡尔积,应避免在无任何条件时做多表联合查询。 内连接 等值连接查询条件中使用=作为连接条件 ...

  • JOIN表之后产生的笛卡尔积问题

    背景:inner join之后产生笛卡尔积 一、单表以及join之后产生的记录数 inner join之后产生了笛...

  • 数据库概念

    快速定位核心表 核心表的数据往往是最大的 笛卡尔积和内外连接 内外连接的底层是从两表产生笛卡尔积临时表,内连接筛选...

  • 连接查询

    笛卡尔积 有两个集合A和B,笛卡尔积表示A集合中的元素和B集合中的元素任意相互关联产生的所有可能的结果 Sql中笛...

  • 内连接查询 (select * from a join b on

    from a join b 与 from a, b 产生的临时表结果集 。 都是执行笛卡尔积即(select * ...

  • 三、连接查询

    内连接 1、笛卡尔积 语法 无条件筛选 有条件筛选 什么是笛卡尔积?笛卡尔积就是将A和B表中的行任意组合,得到一个...

网友评论

      本文标题:避免产生笛卡尔积

      本文链接:https://www.haomeiwen.com/subject/ucqwmttx.html