【问题标题】:MySQL select query for stock management用于库存管理的 MySQL 选择查询
【发布时间】: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 是动态的。来自另一个查询结果。

标签: php mysql database


【解决方案1】:

试试GROUP BY I.id

    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
    `I`.`id`

【讨论】:

    【解决方案2】:

    试试这个

    SELECT
        `I`.`id`,
        `I`.`modal`,
        `I`.`brand`,
        IFNULL((SELECT SUM(P.qty) FROM purchase_details `P` WHERE p.item_id = I.id),
        0) AS p_qty,
        IFNULL(SUM(S.qty),
        0) AS s_qty
    FROM `items` `I`
    LEFT JOIN `sale_details` `S` ON `S`.`item_id` = `I`.`id`
    WHERE  `I`.`id`  BETWEEN 1 AND 70
    GROUP BY I.id
    

    【讨论】:

    • 它可能有效,但 I.id 不是静态的。它会一直变化。
    • 尝试删除SUM(P.qty) - SUM(S.qty) AS t_qty
    • 我也试试这个东西。实际上我尝试了很多事情而不是来这里。我不明白为什么它只返回一个结果。
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 2021-11-19
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多