根据另一张表的更新更新一张表的记录[重复]
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:这不是我提供给您的查询。请完全按照给定的方式运行查询,并报告它是否有效。以上是关于根据另一张表的更新更新一张表的记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章