我在mysql中创建了五个不同的表,其中包含学生记录。每个表基本上都有统一的列名。学生ID、科目1分、科目2分、科目3分、总分。这五个表分别是term1、term2、term3、term4和overall。
我想做的是,当我在term1、term2、term3和term4中插入值时,必须自动计算每列的得分之和、subject1\u得分、subject2\u得分、subject3\u得分、total\u得分,并将其放在overall表的相应列中。下面是我的代码。当我在term1表中插入分数时,我正在尝试更新总体表。它现在正在做的是得到total\ u score列的总和。我希望它取term1中的total \u score的值,并将其添加到total \u score的值中,然后将其作为更新后的当前值放入total中。下面是我的代码。请帮我实现我想做的事。
SELECT SUM( Total_Score )
FROM (
SELECT SUM( Total_Score ) AS Total_Score
FROM Term1
UNION ALL
SELECT SUM( Total_Score ) AS Total_Score
FROM overall
) AS ALIAS;
1条答案
按热度按时间s4n0splo1#
你目前的设计不是标准化的,这意味着你需要付出很多努力才能达到你想要的。
对于每个term表,创建before和after insert触发器、before和after update触发器以及after delete触发器,其中解析所有表以计算overall.total。类似这样的东西(我只为term1创建了insert和update触发器,以减少答案大小)
注1)debug\表用于协助调试2)studentid是所有表的主键
如果您的mysql版本支持生成的列,那么您可以省去before触发器,但是您确实不应该存储易于计算的数据。
如果你的数据库是正常的,那么所有这些代码消失。考虑一个表studentid,term,subject,subject\u分数