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

时间:2015-06-20 06:03:11

标签: mysql sql

我的数据库有两个表stock和损坏。

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表如下所示

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_name列的值的行,我会使用

select * from stock s where item_name in
( select item_name from damage);

完全符合我的要求。

现在,我想从qty的{​​{1}} col中减去damagestock col的值,其中qty的值来自两列必须是一样的。

我想我必须使用变量,但我不知道如何......

2 个答案:

答案 0 :(得分:1)

看起来每个damage项可能有多个stock个条目。因此,您需要在加入之前在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;

答案 1 :(得分:0)

尝试使用join:

damage

SQL Fiddle中的示例。

<强>解释

带有条件d.qty IS NOT NULL的表IN的左连接也会做同样的事情。它与使用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

找到可用数量

修改

更新表格:

<div class="upperdiv">photos</div>
<div class="lowerdiv">photos</div>