2014-09-19 77 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 
    ) 
; 
的不同數