繁体   English   中英

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

[英]MySQL using LEFT JOIN to query on all records not just one

我正在使用MySQL和带有子选择的LEFT JOIN。 无论如何,以目前的设置方式,我都必须用硬编码在查询中的值“ ELO-250030”。 我希望能够运行此脚本而不必在值中进行硬编码或将其传递到查询中,我只想让sql查询循环遍历db表中的所有记录,并匹配当前具有“ ELO-250030”的位置”。 例如,如果我的SKU为ELO-250030,ELO-250031,ELO-250032。 它需要查询这些值中的每一个。 如何在下面设置查询,以便删除:

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; 

您的group by很混乱...任何其他SQL引擎都会在您的查询中出错(如应有的错误),但是MySQL喜欢忽略它并做错了事...最好的解决方案是卸载MySQL并使用更好的数据库。

失败的话,如果您的小组是正确的,cmorrissey的评论实际上是正确的答案:

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

删除SKU参考。

我认为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; 

除非您专门针对不同/特定的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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM