根据对另一个表的更新来更新一个表的记录

时间:2020-10-24 17:08:46

标签: mysql sql sum sql-update subquery

我有两个表,一个是tblstationerystock(文具名称,stationcode_code,余额),另一个是tblstationerytranscation(stationery_code,trsntype,quantity)。Trsntype列是包含两种类型的值(接收或发出)的转换类型

我想根据第二张表格中文具的任何交易来计算第一张表格中的余额值。我的表格看起来像这样

Clickk here for table

我对sql不太了解。是否可以指导我实现这一目标。

1 个答案:

答案 0 :(得分:-1)

一个选项是更新/联接查询:

update tblstationerystock s
inner join (
    select stationery_code, 
        sum(case when trsntype = 'RECEIVED' then quantity else -quantity end) balance
    from tblstationerytranscation
    group by stationery_code
) t on t.stationery_code = s.stationery_code
set s.balance = t.balance

从设计的角度来看,存储此类信息不是一件好事,因为很难使其保持最新状态。您可能很快就会发现自己需要触发器,该触发器将在每次在另一个表中插入,修改或删除事务时自动更新主表。这是派生的信息,可以在需要时随时进行计算。为此,您可以例如创建一个视图:

create view w_tblstationerystock as
select s.stationery_name, s.stationery_code 
    (
        select sum(case when trsntype = 'RECEIVED' then quantityu else -quantity end) balance
        from tblstationerytranscation t
        where t.stationery_code = s.stationery_code
    ) as balance
from tblstationerystock s

然后,您可以直接针对视图运行查询,这将始终为您提供数据的最新视角。