Mysql 减去两个表中特定列的值相同的特定列的值
My db有两个表Mysql 减去两个表中特定列的值相同的特定列的值,mysql,sql,Mysql,Sql,My db有两个表库存和损坏 stock表格看起来像 item_code, ss_no, item_name, rack_no, shelf_no, cold_storage, batch_no, qty, packing, expiry_date, mrp, purchase_price, selling_price, margin, formulation, stock_date, min_qty, ss_flag_id, ban_flag_id, sales_discount '1', 1
库存和损坏
stock
表格看起来像
item_code, ss_no, item_name, rack_no, shelf_no, cold_storage, batch_no, qty, packing, expiry_date, mrp, purchase_price, selling_price, margin, formulation, stock_date, min_qty, ss_flag_id, ban_flag_id, sales_discount
'1', 1, 'ABZORB POWDER', 'A-1', ' ', ' ', '9086626', 18, 1, '2017-06-01', 87.00, 66.29, 87.00, 0.00, 'POWDER', '2015-05-11', 0, 0, 0, 0.0
损坏
表如下所示
damage_stock_date, invoice_no, invoice_date, dist_name, contact_no, item_code, item_name, batch_no, mfr_name, expiry_date, qty, damaged_qty, unit_price, unit_vat, unit_discount, sub_total, total_amount, remarks, ds_flag_id, packing
'2015-06-19', '56', '2015-06-19', 'Ganapati Drugs', '', '0', 'SAXIM_', '1', '', '', 50, 10, 2.00, 5.00, 0.00, 21.00, 21.00, '', 0, 0
如果我想从库存中选择一行,其中item\u name
列的值在两个表中都存在,我会使用
select * from stock s where item_name in
( select item_name from damage);
这正是我想要的工作
现在,我想从stock
的quaty
列中减去quaty
列中的值,其中两列中item\u name
的值必须相同
我想我必须使用变量,但我不知道如何使用..尝试使用联接:
select *, (s.qty-d.qty) as available
from stock s LEFT JOIN
damage d on d.item_name=s.item_name
where d.qty IS NOT NULL
例如
说明:
带有条件d的表damage
的左连接。qty不为NULL
也会做同样的事情。这与在
中使用相同(如您的问题)。但优点是,您可以在主查询中使用damage
表的列
因此,您可以通过(s.qty-d.qty)
编辑:
要更新表格,请执行以下操作:
UPDATE stock s LEFT JOIN
damage d ON d.item_name = s.item_name
SET s.qty=(s.qty-d.qty)
WHERE d.qty IS NOT NULL
看起来每个库存
项目都可能有多个损坏
条目。因此,在加入之前,您需要在damage
上使用聚合子查询
SELECT *, stock.qty - total_damage.qty AS remaining_qty
FROM stock,
(SELECT item_name, SUM(qty) AS qty
FROM damage
GROUP BY item_name) AS total_damage
WHERE stock.item_name = total_damage.item_name;
看起来不错,你能在你的帖子里再解释一下吗?@user197324:我已经更新了我的答案。如有需要,请随时要求澄清。赞成票。我试图用减去的值更新列,但我没有工作更新库存集s.qty=s.qty-d.qty左连接损坏d on d.item_name=s.item_name,其中d.qty不为NULL
@user197324:您的问题是关于选择
。无论如何,用更新查询更新了我的答案。请参阅编辑。我不建议您更新库存中的数量。如果您必须更新数量,您可能应该在您还删除损坏记录的事务中进行更新。更好的做法是创建一个net\u stock
视图,该视图看起来像stock
,但已扣除损坏的数量。谢谢您的回答。