2015-01-13 60 views
0

我創建了一個mysql查詢來生成我想要的結果。mysql查詢給出了五個表的錯誤結果

其實它給了我錯誤的結果。我的預期結果是通過從裝運庫存總和中減去銷售庫存的總和來獲得當前庫存。

我的數據庫表有:

items(itemId,itemUniqueNo,itemSize,itemColor....) prices(itemPrice,presentPriceBoolean,items_itemId....) shipments(shipmentDate,noOfPairs,items_itemId,sources_sourceId....) sources(sourceId,sourceName.....) solditems(quantitySold,items_itemId....)

我的查詢如下:

SELECT itemId,itemUniqueNo,itemSize,itemGender,itemColor,sourceName,itemPrice,sourceName, 
    (COALESCE(SUM(noOfPairs),0) - COALESCE(SUM(quantitySold),0)) AS quantityInStock 
FROM(shoepalace.items 
    INNER JOIN shoepalace.prices ON items.itemId = prices.items_itemId AND presentPrice =1) 
    LEFT JOIN shipments ON shipments.items_itemId = items.itemId 
    INNER JOIN sources ON sources.sourceId = shipments.sources_sourceId 
    LEFT JOIN shoepalace.solditems ON items.itemId = solditems.items_itemId GROUP BY itemId 

讓說:

itemId  shipmentQuantity  quantitySold  finalQuantity(quantityInStock) 
2   15      3    12 
3   10      0    10 
4   7      4    3 
....... 

感謝:

+0

根據「讓我們說」其中一個表或最終結果是什麼?它似乎不匹配任何東西,所以我無法做到。您可能想要提供示例表(包含示例數據),查詢得到的結果以及要獲取的結果。因爲這是你的問題很難理解。 – Dijkgraaf

回答

0

您可能會遇到壞/假總和()值如果兩個表有相同的ID多行的問題,你可以得到一個笛卡爾和()的結果。爲了幫助解決這個問題,請預先查詢每個表中的聚合,以便每個ID只有一個記錄(如果可以通過Coalesce測試獲得),那麼就抓住它。

SELECT 
     itemId, 
     itemUniqueNo, 
     itemSize, 
     itemGender, 
     itemColor, 
     itemPrice, 
     S1.sourceName, 
     (COALESCE(S1.ShipPairs ,0) 
     - COALESCE(S2.QtySold, 0)) AS quantityInStock 
    FROM 
     shoepalace.items 
     INNER JOIN shoepalace.prices 
      ON items.itemId = prices.items_itemId AND presentPrice = 1 
     LEFT JOIN 
      (select items_itemId, 
        SUM(noOfPairs) as ShipPairs 
       from 
        shipments 
         INNER JOIN sources 
          ON shipments.sources_sourceId = sources.sourceId 
       group by 
        items_itemId) as S1 
      ON items.itemId = S1.items_itemId 
     LEFT JOIN 
      (select items_itemID, 
        SUM(QuantitySold) QtySold 
       from 
        solditems 
       group by 
        items_itemID) S2 
      ON items.itemId = S2.items_itemId 
+0

非常感謝。先生,你太棒了。你已經解決了我的問題。查詢中有一些小錯誤,但是我解決了它。現在它給了我預期的結果。謝謝。 – Owais