为表中的列创建默认查询(SQL)?

时间:2010-02-08 01:02:39

标签: sql mysql sql-server hql

我的一个表中有一列,它假设是来自多个表的行的总和。有没有办法可以在总和列上运行默认查询,这样每次将一行添加到另一个表时,都会在总和列中进行更新。

谢谢

5 个答案:

答案 0 :(得分:2)

您可能希望查看使用视图而不是表格,以下内容可能有所帮助。

Select table.*, sum(otherTable.column) 
from table 
inner join otherTable on table.something = otherTable.something

答案 1 :(得分:2)

听起来你想要添加一个触发器。

http://dev.mysql.com/doc/refman/5.0/en/triggers.html

答案 2 :(得分:1)

您希望每次更改其他表中的某列时更新总和列吗?然后触发器可以满足您的目的。

   Create Trigger For Insert, Update, Delete
   On OtherTable
   As
      Update SumTable Set
          SumColumn =
               (Select Sum(Column)
                From OtherTable
                Where something = s.Something)
      From SumTable s
      Where Something In
           (Select Distinct something From inserted
              Union
            Select Distinct Something From deleted)

或者,您可以通过编写单独的触发器或通过以下方式将删除代码与插入或更新的代码分开:

   Create Trigger For Insert, Update, Delete
   On OtherTable
   As
      If Exists(Select * From inserted) And Update(Column)
          Update SumTable Set
              SumColumn =
                  (Select Sum(Column)
                   From OtherTable
                   Where something = s.Something)
          From SumTable 
          Where Something In 
              (Select Distinct Something 
               From Inserted)
      Else If Exists(Select * From deleted)              
          Update SumTable Set
              SumColumn =
                  (Select Sum(Column)
                   From OtherTable
                   Where something = s.Something)
          From SumTable 
          Where Something In 
              (Select Distinct Something 
               From deleted)

答案 3 :(得分:1)

正如查尔斯所说,触发器在这种情况下效果很好。但是,如果其他表中的行总和经常更改,我不确定触发器是否会导致性能问题。还有另外两种方法:

视图 - 视图本质上是一个保存的查询,您可以像查询一样查询它。如果报表类型的内容只需要和数据,那么最好从主表中删除sum列并使用视图进行报告

存储过程 - 如果您希望将列保留在主表中,则可以定期运行存储过程,以使所有行的总和信息保持最新。

答案 4 :(得分:0)

在决定使用哪个之前,我会比较视图构思和触发器构思之间的性能。针对您希望视图具有的完整数据集执行此操作,而不仅仅是一小组测试数据集。如果可能,请确保索引视图。

相关问题