2012-04-25 36 views
0

我有这个疑问,它似乎工作的大部分时间,但我仍然得到它空值,当我知道它应该返回的东西,SQL查询工作有时

我开始select,那么这个

(select sum(total) from orders 
     where customer = 9 
     and iscredit = 1 
     and isdeleted = false and not id = 1560) 

代码的这种安宁使我获得了客户9的订单总量,而不是当前订单,就像以前的订单总额一样...也注意到iscredit = 1意味着这些是信用订单。

接下来,我要添加这个查询

(select sum(total) from orders 
     where customer = 9 
     and iscredit = 0 
     and isdeleted = false and not id = 1560) 

做同样的事情,但iscredit为0,因此订单是没有学分。

接下来我想什么减去已支付与此查询

- (select ifnull(sum(p.amount), 0) from payment p 
     inner join orders o 
     on p.order = o.id 
     where o.customer = 9) as previous 

因此,所有这一起我什么查询看起来像....

select 
(
    select sum(total) 
    from orders 
    where customer = 9 and iscredit = 1 and isdeleted = false and not id = 1560 
) 
+ 
(
    select sum(total) 
    from orders 
    where customer = 9 and iscredit = 0 and isdeleted = false and not id = 1560 
) 
- 
(
    select ifnull(sum(p.amount), 0) 
    from payment p 
     inner join orders o 
      on p.order = o.id 
    where o.customer = 9 
) as previous 

有没有更好的方式来写这个?

任何提示将不胜感激。

谢谢

回答

2

这样的事情会把头两个总数合在一起。

(select sum(total) 
from orders 
where customer = 0 
and (iscredit = 1 or iscredit = 0) 
and isdeleted = false 
and not id = 1560) 

这将返回null对于没有匹配行,所以你可能要添加:

(select ifnull(sum(total), 0) 
from orders 
where customer = 0 
and (iscredit = 1 or iscredit = 0) 
and isdeleted = false 
and not id = 1560) 

这可能是你的问题的根源。

+0

谢谢大卫,它的工作原理! – user979331 2012-04-25 15:16:06