首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对同一个表的多个联接的错误计数

对同一个表的多个联接的错误计数
EN

Stack Overflow用户
提问于 2014-02-12 14:02:31
回答 1查看 54关注 0票数 0

我有两张桌子

1-优惠券

2-牵引力

对于每一张优惠券,我希望在不同的条件下,拥有所有优惠券的列表和它的牵引符的计数。

代码语言:javascript
运行
复制
    SELECT `coupons`.`id` ,
            count( tractions_all.id ) AS `all` , 
            count( tractions_void.id ) AS void, 
            count( tractions_returny.id ) AS returny,
            count( tractions_burned.id ) AS burned
      FROM `coupons`
               LEFT JOIN `tractions` AS `tractions_all` 
                         ON `coupons`.`id` = `tractions_all`.`coupon_parent`
               LEFT JOIN `tractions` AS `tractions_void` 
                         ON `coupons`.`id` = `tractions_void`.`coupon_parent`
                         AND `tractions_void`.`expired` =1
               LEFT JOIN `tractions` `tractions_returny` 
                         ON `tractions_returny`.`coupon_parent` = `coupons`.`id`
                         AND `tractions_returny`.`expired` =11
               LEFT JOIN `tractions` `tractions_burned` 
                         ON `tractions_burned`.`coupon_parent` = `coupons`.`id`
                         AND `tractions_burned`.`expired` =0
                         AND '2014-02-12'
     WHERE `coupons`.`parent` =0
  GROUP BY `coupons`.`id`

现在只有我的一张优惠券有2牵引力,两者都是burned traction,其他的优惠券根本就没有牵引力。

这是结果

如你所见,与id=13的优惠券有4牵引力,而它应该是2.我做错什么了?如果我移除最后一个联接,它可以正常工作,我得到2。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-12 14:04:42

你在同一时间沿着多个维度聚集,导致每个id的笛卡儿积。

如果您的数据量不是很大,那么最简单的解决方法就是使用distinct

代码语言:javascript
运行
复制
SELECT `coupons`.`id` ,
       count(distinct tractions_all.id ) AS `all` , 
       count(distinct tractions_void.id ) AS void, 
       count(distinct tractions_returny.id ) AS returny,
       count(distinct tractions_burned.id ) AS burned

如果您的数据很大,那么您可能需要先将值聚合为子查询,然后再进行联接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21730123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档