[英]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.