根据另一张表的更新更新一张表的记录[重复]

Posted

技术标签:

【中文标题】根据另一张表的更新更新一张表的记录[重复]【英文标题】:Update the record of one table based on the update on another table [duplicate] 【发布时间】:2020-10-24 17:08:46 【问题描述】:

我有两个表,一个是 tblstationerystock (stationery_name,stationery_code, balance) 和另一个 tblstationerytranscation(stationery_code,trsntype,quantity)。Trsntype 列是交易类型,由两种类型的值组成(接收或发出)

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

我对sql的了解不多。有没有可能请指导我实现这个。

【问题讨论】:

这已经存在于 dba dba.stackexchange.com/questions/278612/… 请参考meta.***.com/questions/262292/… 【参考方案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

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

【讨论】:

我应该在第一个表还是第二个表上运行这个查询 @hellow:此查询从tblstationerytranscation 表更新tblstationerystock 表中的balance - 这就是我理解您的问题的方式。但是,请参阅我的更新答案,了解有关您要完成的工作的更多想法。 在 tblstationerytranscation.stationery_code = tblstationerystock.stationery_code 上更新 tblstationerystock 内部联接(选择总和(当 txntype = 'RECEIVED' 然后数量为 else -quantity end)从 tblstationerytranscation 组中按 stationery_code 的余额) tblstationerytranscation.balance 我使用了上面的查询,但它显示错误——您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在“on tblstationerytranscation.stationery_code = tblstationerystock.stationery_code”附近使用正确的语法 @hellow:这不是我提供给您的查询。请完全按照给定的方式运行查询,并报告它是否有效。

以上是关于根据另一张表的更新更新一张表的记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server更新表(用一张表的数据更新另一张表的数据)

根据数据库的一张表去更新另一张表的值

Mongo基于一张表的数据更新另一张表

SQL问题,怎么将一张表的某个字段更新为另一张表的字段

把一张表中某列数据更新到另一张表的某列

把一张表中某列数据更新到另一张表的某列