MySQL子查询字段减法结果不正确

时间:2012-09-05 19:37:08

标签: mysql

当我运行此查询时:

select 
(IFNULL(ROUND(convertUnits('40892',SUM(o.qty),o.pricingUnit,'FT')),0)) as oItemQty,
(SELECT IFNULL(sum(i.qty),0) from inventory i where i.partID='40892' and i.type=16 and        i.refDocNum=w.woID and i.refApp='WO') as iItemQty,
(IFNULL(ROUND(convertUnits('40892',SUM(o.qty),o.pricingUnit,'FT')),0) - (SELECT    IFNULL(sum(i.qty),0) from inventory i where i.partID='40892' and i.type=16 and    i.refDocNum=w.woID and i.refApp='WO')) as sum
from orderitem o left join wo w on o.orderitemID=w.orderitemID 
where o.partID='40892' and
w.status not in (1,5) and 
(SELECT cancelDate from orders where orders.orderID=o.orderID)='0000-00-00' and 
o.createWO=1 and 
(SELECT orderDate from orders where orders.orderID=o.orderID) >='2012-07-01'

我为“oItemQty”获得13650,为“iItemQty”获得2730。我遇到的问题是字段“sum”应该是oItemQty - iItemQty(10920)。现在它返回13650(oItemQty)。

我在这里缺少什么?为什么当我将子查询作为单独的字段运行时,数字是正确的,但是当我尝试减去它时,它无法正常工作?

更新:原来这是一个投射问题。一旦我将iItemQty转换为unsigned,它就会被正确地减去。

1 个答案:

答案 0 :(得分:0)

查看您的查询,我注意到的第一个问题是您通过将其包含在WHERE子句中来否定您的左连接:

w.status not in (1,5)

您应该将其移动到左连接的ON子句中以保留该连接的意图。因为它现在基本上被视为内连接。