2015-04-26 177 views
0

我试图显示'NULL'值为0使用'IFNULL',但它返回所有行为null或0.一切正常,直到我添加'lounge2'表和'lounge2order2'表。 order2.lounge2orderid是'NULL'。我知道这与'JOINS'有关,但不确定在哪里或哪些实施。MYSQL数据库IFNULL查询

谢谢大家......所有的

SELECT orders2.orderid, orders2.orderdate, branch2.branchname, COUNT(orders2.garment2orderid) AS 'no gar orders', SUM(garment2.hireprice) as 'total gar sold', 
COUNT(orders2.lounge2orderid+IFNULL(orders2.lounge2orderid,0)) as 'No of lounge sales', SUM(lounge2.hirerate) 

from orders2, branch2, garment2, garment2order2, lounge2, lounge2order2 

WHERE orders2.orderid IN 

      (SELECT orders2.orderid FROM orders2 
       WHERE orders2.branchid = 2 
       AND YEAR(orders2.orderdate)= 2011) 

AND branch2.branchid IN 

      (SELECT branch2.branchid from branch2 
        WHERE branch2.branchid = orders2.branchid) 

AND garment2order2.garment2orderid IN 
      (SELECT garment2order2.garment2orderid FROM garment2order2 
       WHERE garment2order2.garment2orderid = orders2.garment2orderid) 

AND garment2.garmentid IN 

      (SELECT garment2.garmentid FROM garment2 
       WHERE garment2.garmentid = garment2order2.garmentid) 

AND lounge2order2.lounge2orderid IN 
      (SELECT lounge2order2.lounge2orderid FROM lounge2order2 
       WHERE lounge2order2.lounge2orderid = orders2.lounge2orderid) 

AND lounge2.loungeid IN 

      (SELECT lounge2.loungeid FROM lounge2 
       WHERE lounge2.loungeid = lounge2order2.loungeid)      
+0

不知道为什么它已经分裂了一切 – DangerousTreacle

回答

1

首先,尽量避免FROM orders2, branch2, garment2, garment2order2, lounge2, lounge2order2它必须是JOIN ... ON声明。这将有助于您进行调试,并帮助我们理解您的逻辑和表关系。

并且要有SUMCOUNT的任何agregate功能,您应该设置GROUP BY声明。

因为我不知道你的数据库结构是什么样的。

这里是我的尝试:如果你有

SELECT 
    orders2.orderid, 
    orders2.orderdate, 
    COUNT(orders2.garment2orderid) AS 'no gar orders', 
    branch2.branchname, 
    SUM(garment2.hireprice) as 'total gar sold', 
    SUM(IF(orders2.lounge2orderid IS NULL,1,0)) as 'No of lounge sales', 
    SUM(lounge2.hirerate) 
FROM orders2 
LEFT JOIN branch2 
ON branch2.branchid = orders2.branchid 
LEFT JOIN garment2order2 
ON garment2order2.garment2orderid = orders2.garment2orderid 
LEFT JOIN garment2 
ON garment2.garmentid = garment2order2.garmentid 
LEFT JOIN lounge2order2 
ON lounge2order2.lounge2orderid = orders2.lounge2orderid 
LEFT JOIN lounge2 
ON lounge2.loungeid = lounge2order2.loungeid)  
WHERE orders2.branchid = 2 
    AND YEAR(orders2.orderdate)= 2011 
GROUP BY orders2.orderid 
+0

这工作非常出色非常感谢你 – DangerousTreacle

+0

@BrianForbes你可能要仔细检查计数/概括你得到既有休息室订单又有服装订单的订单。连接可能会导致您在结果中出现重复行,这会导致您的聚合(SUM/COUNT)数字处于关闭状态。一个简单的方法来检查将只是做一个SELECT *并在最后删除GROUP BY,然后你可以看到实际获得聚合的数据。 –

+0

我会检查谢谢你... – DangerousTreacle