我的数据库有两个表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中减去damage
中stock
col的值,其中qty
的值来自两列必须是一样的。
我想我必须使用变量,但我不知道如何......
答案 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>