Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 减去两个表中特定列的值相同的特定列的值_Mysql_Sql - Fatal编程技术网

Mysql 减去两个表中特定列的值相同的特定列的值

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

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, '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
,但已扣除损坏的数量。谢谢您的回答。