【发布时间】:2017-05-23 20:38:33
【问题描述】:
我正在尝试从购买和销售表中获取当前库存,但只得到一个结果。
这是我写的查询。
SELECT `I`.`id`, `I`.`modal`, `I`.`brand`,
IFNULL(SUM(P.qty), 0) as p_qty,
IFNULL(SUM(S.qty), 0) as s_qty,
SUM(P.qty)-SUM(S.qty) as t_qty
FROM `items` `I`
LEFT JOIN `purchase_details` `P` ON `P`.`item_id` = `I`.`id`
LEFT JOIN `sale_details` `S` ON `S`.`item_id` = `I`.`id`
WHERE `I`.`id`
IN("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70")
GROUP BY `P`.`item_id`
预期结果:根据库存,所有商品都应带有或不带零。
【问题讨论】:
-
您在此处添加的“IN”语句是否必要?
-
是的,因为项目不受限制且可预测。如果您有其他方法可以做到这一点,请建议我。
-
我只是在想 - 如果您的表中始终有 70 件商品,那没关系,但如果您将商品添加到库存中,则需要将 ID 添加到该语句中才能包含在内在结果中。如果没有,您可以省略 WHERE...IN... 语句,它也应该按预期工作:)
-
出于好奇,它返回的是哪个项目(ID)?
-
是的,我知道,这些 ID 是动态的。来自另一个查询结果。