2014-09-19 65 views
-1

如何重做以下查询以仅使用JOIN而不是嵌套查询?重新排列MySQL嵌套查询

SELECT SUM(allqty) AS allqty 
    ,COUNT(*) AS orders 
FROM (SELECT SUM(S.Qty) AS allqty 
     FROM data_intra.yw1_ordersheet S 
     INNER JOIN data_intra.productdata P ON P.productid=S.productid 
     WHERE P.eCode LIKE (SELECT eCode 
          FROM data_intra.productdata 
          WHERE productid=1001) 
     GROUP BY S.OrderPO) as A; 
+1

当前查询存在缺陷,您将始终得到1的计数。您能告诉我们您真正想要计算的是什么?订单数量?产品的数量有多少?请记住,我们对这些表格和字段一无所知。 – 2014-09-19 04:55:07

+0

您可以删除计数(*)部分。这不是必需的。请考虑查询的其余部分。 – 2014-09-19 05:04:26

+0

向我们提供您的表格结构和数据样本,这将帮助我们为您解决问题 – 2014-09-19 05:04:28

回答

1

这里有2个猜测。两者都使用IN()而不是LIKE()

这将产生一个行的每个S.OrderPO

SELECT 
     SUM(S.Qty) AS allqty 
    , S.OrderPO 
FROM data_intra.yw1_ordersheet S 
     INNER JOIN data_intra.productdata P 
        ON P.productid = S.productid 
WHERE P.eCode IN (
      SELECT 
        eCode 
      FROM data_intra.productdata 
      WHERE productid = 1001 
    ) 
GROUP BY 
     S.OrderPO 
; 

这将产生一个行,计数S.OrderPO

SELECT 
     SUM(S.Qty)    AS allqty 
    , COUNT(DISTINCT S.OrderPO) AS orders 
FROM data_intra.yw1_ordersheet S 
     INNER JOIN data_intra.productdata P 
        ON P.productid = S.productid 
WHERE P.eCode IN (
      SELECT 
        eCode 
      FROM data_intra.productdata 
      WHERE productid = 1001 
    ) 
; 
的不同数