我正在使用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;
答案 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;