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

避免产生笛卡尔积

作者: 杨晓兰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则不会产生重复。

    相关文章

      网友评论

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

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