【问题标题】:MYSQL - Quantity Left - Product with Serial - Multiple TableMYSQL - 剩余数量 - 带有序列的产品 - 多表
【发布时间】:2014-09-17 13:10:49
【问题描述】:

如何制作一个 mysql 来显示所有具有不同序列号和可用数量的特定产品。 请注意,我的客户没有存储数量的表格, 我们拥有的是:

  • received_purchase_order_detail
  • received_transfer_order_detail
  • transfer_order_detail
  • official_receipt_detail
  • ...以及更多表格... 这些是我们用来知道还有多少可用数量的表格。

可用数量 = ( received_purchase_order_detail+received_transfer_order_detail )-( transfer_order_detail+official_receipt_detail .... )

我已经有一个 FuzzyTree 给出的查询,但它按产品数量显示了一个组。

MySQL Group By Product Id BUT NOT Product that has a Serial Number

我现在需要的是查询具有不同序列号的产品id并显示每个可用数量。

而不是

Product_ID      Product_Name    Quantity_Available
6               Apple           100
7               Blender         2
8               Toaster         3

我需要

Product_ID  Product_Name    Serial_No   Quantity_Available
6           Apple           NULL        100
7           Blender         b1          0
7           Blender         b2          1
7           Blender         b3          1
8           Toaster         t1          1
8           Toaster         t2          1
8           Toaster         t3          1

-------


我现在的测试 sql 问题: 我一直在将派生表与 union 结合起来,并通过 s_product_serial 组将它们分开。但是我的查询显示所有序列数量为 0 的产品,就像他们正在跟踪第一个产品的第一个数据,序列号已售出..,只有第一个带有 b1 序列的搅拌机被出售,但另一个搅拌机应该仍然可用..

注意 我添加了一个联合查询,因为 products 表没有 serial_no 列...,序列分散在不同的表上。所以我首先要做的是联合这些表来收集完整的 serial_no 可用。或者,也许我以错误的方式接近这个?

问题

Product_ID  Product_Name    Serial_No   Quantity_Available
6           Apple           NULL        100
7           Blender         b1          0
7           Blender         b2          0
7           Blender         b3          0
8           Toaster         t1          0
8           Toaster         t2          0
8           Toaster         t3          0
选择 tabletest1.i_p_id, tabletest1.s_product_serial, ( COALESCE(tabletest1.Product_Total,0) + COALESCE(table1.Product_Total,0) + COALESCE(table2.Product_Total,0) + COALESCE(table3.Product_Total,0) ) 作为“添加的总数量”, ( COALESCE(tabletest1.Product_Total,0) + COALESCE(table4.Product_Total,0) + COALESCE(table5.Product_Total,0) + COALESCE(table6.Product_Total,0) ) 作为“已发布的总数量”, ( COALESCE(tabletest1.Product_Total,0) + COALESCE(table1.Product_Total,0) + COALESCE(table2.Product_Total,0) + COALESCE(table3.Product_Total,0) ) - ( COALESCE(tabletest1.Product_Total,0) + COALESCE(table4.Product_Total,0) + COALESCE(table5.Product_Total,0) + COALESCE(table6.Product_Total,0) ) AS '当前可用数量' 从 ( ..联合查询.. ) 作为表测试1 左连接 ( 派生表1.. ) AS table1 ON table1.i_p_id = tabletest1.i_p_id 左连接 ( 派生表2.. ) AS table2 ON table2.i_p_id = tabletest1.i_p_id 左连接 ( 派生表3.. ) AS table3 ON table3.i_p_id = tabletest1.i_p_id 左连接 ( 派生表4.. ) AS table4 ON table4.i_p_id = tabletest1.i_p_id 左连接 ( 派生表5.. ) AS table5 ON table5.i_p_id = tabletest1.i_p_id 左连接 ( 派生表6.. ) AS table6 ON table6.i_p_id = tabletest1.i_p_id 通过...分组 i_p_id, s_product_serial

【问题讨论】:

  • 这个问题似乎离题了,因为 Stackoverflow 不是代码创建社区。描述您尝试过的方法以及错误的地方
  • @DarylGill,对不起,我忘了粘贴我的测试 sql。它也很长。请检查已编辑的帖子
  • 哇。那一定是某种记录。
  • 神圣的地狱。从移动设备调试的内容很多
  • 请编辑问题并显示可生成指定结果的示例数据。

标签: php mysql sql


【解决方案1】:

我想我明白了。

而不是 AS table(n) ON table(n).i_p_id = tabletest(n).i_p_id

应该是指连续剧 AS table(n) ON table(n).s_product_serial = tabletest(n).s_product_serial

现在它工作正常,但基于我的 sql 有多长,我想知道这是否有效?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    相关资源
    最近更新 更多