2012-09-05 43 views
0

当我运行此查询: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' 

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

我在这里失踪了什么?为什么当我运行子查询作为单独的字段是数字正确的,但是当我试图减去它不正常工作?

更新:原来,这是一个铸造问题。一旦我将iItemQty作为未签名进行铸造,就会正确扣除它。在查询

+0

什么是'convertUnits'? – Kermit

+0

请提供样本数据和期望的输出。 – RedFilter

+0

@njk convertUnits是一个存储过程。我认为这不是问题,如果我去 (IFNULL(ROUND(convertUnits('40892',SUM(o.qty),o.pricingUnit,'FT')),0) - 2730)as sum 我得到了正确的结果 - 所以它似乎与后者子查询有关? – drschultz

回答

0

看,我注意到的第一个问题是,你否定你的左边,包括这个WHERE子句中加入:

w.status not in (1,5) 

你应该移动到这左边的ON子句加盟保持该连接的意图。现在,它基本上被视为内部连接。

+0

Ike - 这使情况变得更糟,在我的查询中,因为它是oItemQty和iItemQty都是正确的,我只是不能让它们减去 – drschultz

+0

你应该尽可能多地替换子节点,请尽可能使用联接进行查询。例如,加入订单表以通过cancelDate和orderDate进行过滤。 –