mysql - MySQL 库存维护
问题描述
我有一个简单的程序来管理某些车辆的燃料发放状态
即包括下表
store_item
+---------+-----------+--------+
| item_id | item_name | status |
+---------+-----------+--------+
| 1 | Diesel | 1 |
+---------+-----------+--------+
tbl_vehicle
+------------+------------+
| vehicle_id | vehicle_no |
+------------+------------+
| 1 | 4545 |
| 2 | 4546 |
| 3 | 4547 |
| 18 | 4548 |
+------------+------------+
store_update_stock
+-----------------+------------+---------+--------+
| update_stock_id | bill_date | bill_no | status |
+-----------------+------------+---------+--------+
| 1 | 2019-09-25 | 123 | 1 |
| 2 | 2019-09-26 | 456 | 1 |
+-----------------+------------+---------+--------+
store_update_stock_details
+-------------------------+-----------------+------+-----+--------+
| update_stock_details_id | update_stock_id | item | qty | status |
+-------------------------+-----------------+------+-----+--------+
| 1 | 1 | 1 | 900 | 1 |
| 2 | 2 | 1 | 800 | 1 |
+-------------------------+-----------------+------+-----+--------+
tbl_fuel
+---------+------------+-------------+------+----------+
| fuel_id | vehicle_id | issued_date | item | fuel_qty |
+---------+------------+-------------+------+----------+
| 1 | 2 | 2019-09-25 | 1 | 50 |
| 2 | 2 | 2019-09-25 | 1 | 50 |
| 3 | 18 | 2019-09-26 | 1 | 25 |
| 4 | 2 | 2019-09-27 | 1 | 50 |
+---------+------------+-------------+------+----------+
我使用了以下代码
select sum(store_update_stock_details.qty) - tbl_fuel.fuel_qty as qty
from store_update_stock_details
inner join store_update_stock on store_update_stock_details.update_stock_id=store_update_stock.update_stock_id
join store_item on store_update_stock_details.item=store_item.item_id
join tbl_fuel on store_item.item_id=tbl_fuel.item
where store_update_stock.status=1
group by store_item.item_id
想出去
+------+
| qty |
+------+
| 1525 |
+------+
但是代码生成以下输出
+------+
| qty |
+------+
| 6750 |
+------+
我不明白可能出了什么问题。谁能帮我 ?
解决方案
您的查询的主要问题是,由于您在与股票更新详细信息表中的tbl_fuel
匹配相同的多行item
中,您最终会在结果集中得到多行,这些行正在被求和(因此大于预期的结果)。要解决此问题,您需要分别在每个表中逐项进行总和,然后减去结果:
select susd.qty - tf.fuel_qty as qty
from (select susd.item, sum(susd.qty) AS qty
from store_update_stock_details susd
join store_update_stock sus on sus.update_stock_id = susd.update_stock_id
where sus.status = 1
group by item) susd
join store_item si on susd.item = si.item_id
join (select item, sum(fuel_qty) AS fuel_qty
from tbl_fuel
group by item) tf on si.item_id=tf.item
输出:
qty
1525
推荐阅读
- salesforce - 如何从订单对象中获取机会拆分记录
- javascript - AngularJS ng-if 变量只工作一次
- python-3.x - 如何绘制共享相同 x 轴的 2 个子图
- python - 查找平均值并显示来自 csv 的最大数据(列表索引必须是整数或切片,而不是 str)#python
- javascript - 如何将axios返回的json保存在变量中?
- arduino - 如何在没有运动时阻止 PIR 传感器发送高输出
- python - 蜘蛛完成后返回scrapy项目
- javascript - 如何过滤深层嵌套数据?- Javascript JSON
- vue.js - 100% 动态多租户 VueJS/.NetCore 应用程序中的 SSR(内容、组件等)
- java - 将图像/文件上传到服务器时使用 MultipartBody.Builder 的问题