基于来自不同表的值更新表中的值

时间:2017-08-05 20:37:19

标签: sql ms-access

我为我的标题含糊而道歉,因为我总是很难描述在SQL方面需要做些什么。我正在使用微软访问,我总共有3个表:Credits,Orders和Books,如下所示。我需要创建一个更新查询,根据他们订购的书籍以及每本书的相应学分数来更新每个学生的现有学分数。

例如,学生B-17以24学分开始,但在更新查询后,应将学生的学分改为32学分。

学分表

Student ID    Number of Credits
B-17          24
F-59          30

订单表

Student ID    Book ID
B-17          101
B-17          102
F-59          101
F-59          105

书籍表

Book ID    Book Title    Credits
101        English I     3
102        Accounting    5
105        Calculus      5

编辑:我需要更新现有记录,而不是将其更改为更新未来订单的位置。

1 个答案:

答案 0 :(得分:1)

您需要在触发器中执行此操作,其中更新仅访问刚刚添加的订单(新插入的订单),而不是之前添加的所有订单。

Update credits c set 
  credits = credits + 
    (Select sum(credits) from orders
     where student_id = c.student_Id)

或者,您需要在订单表中标记每一行是否已计入信用表。

 Update credits c set 
  credits = credits + 
    (Select sum(credits) from orders
     where student_id = c.student_Id 
        and added = 0)

然后设置标志以指示已添加订单。

 Update orders set added = 1 
 where added = 0