过帐已售产品时出错,可用库存结果不正确

  • 本文关键字:不正确 结果 出错 mysql
  • 更新时间 :
  • 英文 :


这些是获得所需结果的最重要表:

记录:tbl_order

颜色1空 空空 空3 空空红空 空
id_order id_enterprise id_branch_office code_unique title_product 模型 尺寸 数量
1HOLAX10
21HOLAXL3
1霍拉3
41HOLA空 红3

首先,一些批评。

  • 摆脱id_enterprise. 而是id_branch=0意思是"企业"。
  • GROUP BY不包括所有非聚合列;我很惊讶你没有受到"只有完整的团体"的打击。
  • 求和最大值没有意义。
  • 一个地方,"产品"是code_unique和位置的组合。 另一个地方,你暗示颜色等有助于区分。
  • OR使得大多数索引使用变得不可能。 函数调用也是如此。

那么一个可能的缺陷:

LEFT JOIN x  ON ...
WHERE ...

ON应该说明它们之间的关系。WHERE应该进行过滤。 但是,WHERE可以测试 NULL 以决定是否需要"右侧"表的行,即使ON不匹配也是如此。

对答案的猜测。

  • 不要在不需要时使用LEFT

  • 由于您似乎正在过滤spodr. 看看这样写是否有意义:

    FROM sp
    JOIN odr ON ...
    [LEFT] JOIN ((other tables))
    WHERE ((the filtering and any IS NULLs for the other tables))
    

更多

  • 我很确定你不应该在内GROUP BY中包含sp.item_total. 也许你应该摆脱那个GROUP BY,相反,有SELECT DISTINCT.
  • SUM(IFNULL(x, 0))可以简化为SUM(x)
  • 因为WHERE ac.user=2LEFT JOIN ac真的INNER JOIN
  • 如果tbl_access具有带有id_user的索引_starting,则查询的性能可能会更好。

最新更新