MySQL使用LEFT JOIN查询所有记录而不仅仅是一个

时间:2014-09-30 18:20:36

标签: php mysql sql

我正在使用MySQL和LEFT JOIN以及子选择。在任何情况下,我现在的方式设置,我不得不硬编码的价值" ELO-250030"我正在查询。我希望能够运行此脚本而无需在我的值中进行硬编码或将其传递给查询,我只是希望sql查询循环遍历db表中的所有记录并匹配我当前所拥有的位置" ELO-250030&#34 ;.例如,如果我有一个ELO-250030,ELO-250031,ELO-250032的sku。它需要查询每个值。如何在下面设置我的查询,以便我可以删除:

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; 

3 个答案:

答案 0 :(得分:2)

你的小组被搞乱了......任何其他SQL引擎都会在你的查询中出错(应该如此),但是MySQL喜欢忽略它并做错了...最好的解决办法是卸载MySQL并使用一个更好的数据库

如果不这样做,如果您的小组是正确的话,cmorrissey的评论实际上是正确的答案:

将您的论坛更改为:     fbai.id,     fbai.sku,     sumQS

删除SKU参考。

答案 1 :(得分: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; 

答案 2 :(得分: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;