2014-09-30 141 views
0

我正在使用MySQL和LEFT JOIN與子選擇。在任何情況下,我現在都已經設置好了,我不得不在我正在查詢的值「ELO-250030」中進行硬編碼。我希望能夠運行此腳本,而不必在我的值中硬編碼或將其傳遞到查詢中,我只是希望sql查詢循環遍歷數據庫表中的所有記錄,並匹配我目前所在的位置「ELO-250030 」。例如,如果我有ELO-250030,ELO-250031,ELO-250032的SKU。它需要查詢每個這些值。如何設置我的查詢下面,這樣我可以刪除:MySQL使用LEFT JOIN查詢所有記錄不只是一個

AND fbas.sku = 'ELO-250030' 

AND fbai.sku = 'ELO-250030' 

但MySQL將仍然匹配這些列和查詢......

這裏是我的全部sql查詢。

SELECT fbai.id, 
    fbai.sku, 
    sumQS, 
    SUM(fbai.qtyFulfillable) AS sumQF 
FROM FBAInventory fbai 
LEFT JOIN 
    (
     SELECT fbas.sku, SUM(fbas.quantityShipped) as sumQS 
     FROM FBAShipment fbas 
     WHERE fbas.shipmentDate BETWEEN '2014-08-15 22:19:50' AND '2014-09-15 01:10:57' 
     AND fbas.sku = 'ELO-250030' 
    ) fbas ON fbai.sku = fbas.sku 
WHERE fbai.fbaInventoryReport_id = 62010 
AND  fbai.sku = 'ELO-250030' 
GROUP BY fbai.id 
ORDER BY sumQF DESC; 

我已經試過這樣做,但我只是得到錯誤:

SELECT fbai.id, 
    fbai.sku, 
    sumQS, 
    SUM(fbai.qtyFulfillable) AS sumQF 
FROM FBAInventory fbai 
LEFT JOIN 
    (
     SELECT fbas.sku, SUM(fbas.quantityShipped) as sumQS 
     FROM FBAShipment fbas 
     WHERE fbas.shipmentDate BETWEEN '2014-08-15 22:19:50' AND '2014-09-15 01:10:57' 
     AND fbas.sku = fbai.sku 
    ) fbas ON fbai.sku = fbas.sku 
WHERE fbai.fbaInventoryReport_id = 62010 
GROUP BY fbai.sku 
ORDER BY sumQF DESC; 
+0

刪除有問題的兩條線,並通過'GROUP更改GROUP BY fbai.sku' – cmorrissey 2014-09-30 18:27:20

+0

當我做你的建議,我的「sumQS」一欄是空的所有記錄 – LargeTuna 2014-09-30 18:32:04

+0

你是如何打算通過值'ELO-250030'到查詢?這個值來自哪裏? – Rahul 2014-09-30 18:36:39

回答

0

我覺得左連接和子查詢在SELECT子句是罰款解決方案。

例如

SELECT 
    fbai.id, 
    fbai.sku, 
    (
     SELECT SUM(fbas.quantityShipped) as sumQS 
     FROM FBAShipment fbas 
     WHERE fbas.sku = fbai.sku 
      AND fbas.shipmentDate BETWEEN '2014-08-15 22:19:50' AND '2014-09-15 01:10:57' 
    ) sumQS, 
    SUM(fbai.qtyFulfillable) AS sumQF 
FROM FBAInventory fbai 
WHERE fbai.fbaInventoryReport_id = 62010 
GROUP BY fbai.id, fbai.sku 
ORDER BY 4; 
+0

我需要能夠運行這個查詢,而不必使用這一行:AND fbai.sku ='ELO-250030'或這一行:AND fbas.sku ='ELO-250030'。 – LargeTuna 2014-09-30 18:42:53

+0

我已經試過這樣做,但我只是得到錯誤:( SELECT SUM(fbas.quantityShipped)作爲sumQS FROM FBAShipment FBA的 WHERE fbas.sku = fbai.sku 和fbas.shipmentDate「之間的2014年8月15日22: 19:50'AND'2014-09-15 01:10:57'AND fbai.sku = fbas。sku )sumQS, – LargeTuna 2014-09-30 18:43:36

+0

感謝您的幫助,但問題是,您仍然認爲我正在傳遞變量「ELO-250030」,我不想這樣做。我想要第一個查詢將該值插入到子查詢中。所以基本上,子查詢將在查詢運行時繼承每個sku值,然後輸出結果。 – LargeTuna 2014-09-30 19:00:44

2

你GROUP BY是亂七八糟......任何其他的SQL引擎會報錯了您的查詢(因爲它應該),但MySQL的熱愛忽略它,做錯誤的事情,而不是.. 。最好的解決方案是卸載MySQL並使用更好的數據庫。

做不到這一點,cmorrissey的評論實際上是正確的答案有你組由是正確的:

通過改變你的組: fbai.id, fbai.sku, sumQS

刪除SKU參考。

0

除非您特別過濾出不同/特定的SKU編號,否則您可以在表格之間進行連接以匹配SKU。像下面的東西。

SELECT fbai.id, 
     fbai.sku, 
     fbas.sumQS, 
     fbai.sumQF 
FROM 
(
    SELECT id, 
     sku, 
     SUM(qtyFulfillable) as sumQF 
    FROM FBAInventory 
    WHERE fbaInventoryReport_id = 62010 
    GROUP BY id, sku 
) fbai 
LEFT JOIN 
    (
     SELECT sku, SUM(quantityShipped) as sumQS 
     FROM FBAShipment 
     WHERE fbas.shipmentDate 
     BETWEEN '2014-08-15 22:19:50' AND '2014-09-15 01:10:57' 
     GROUP BY sku  
    ) fbas 
ON fbai.sku = fbas.sku 
ORDER BY fbai.sumQF DESC; 
+0

這仍然返回所有sumQS爲NULL – LargeTuna 2014-09-30 18:55:53

+0

快到了,現在sumQf而非顯示85 :(感謝1615給你通過這就是爲什麼你應該在你的後清除一切事先的方式 – LargeTuna 2014-09-30 19:01:59

+0

幫助檢查編輯。我認爲這是你正在尋找的東西。 – Rahul 2014-09-30 19:27:49