Sql 更新查询以基于另一个表中的值更改一个表中某列的现有值

Sql 更新查询以基于另一个表中的值更改一个表中某列的现有值,sql,ms-access,Sql,Ms Access,我使用的是microsoft access,共有3个表:学分、订单和书籍,如下所示。我需要创建一个更新查询,根据每个学生订购的书籍和每本书的相应学分数量,更新每个学生的现有学分数量 例如,学生B-17以24学分开始,但在更新查询之后,应将学生的学分更改为32学分 学分表 Student ID Number of Credits B-17 24 F-59 30 订单表 Student ID Book ID B-17 101 B-1

我使用的是microsoft access,共有3个表:学分、订单和书籍,如下所示。我需要创建一个更新查询,根据每个学生订购的书籍和每本书的相应学分数量,更新每个学生的现有学分数量

例如,学生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
这是我正在尝试的,但我在Access中不断遇到语法错误

UPDATE Credits c
SET [Number of Credits] = [Number of Credits] + (SELECT SUM(Credits)
FROM Orders o, Books b ON
o.[Book ID] = b.[Book ID] WHERE 
c.[Student ID] = o.[Student ID])
WHERE c.[Student ID] = o.[Student ID];

您可以尝试使用临时表来存储第二个和第三个表中的数据;这样做:1)创建另一个包含两列的第四个表(即Temp):学生ID和学分;2) 运行以下脚本:

SELECT o.[Student ID], sum (b.Credits) as Credits INTO Temp 
FROM books b INNNER JOIN orders o
on b.[Book ID] = o.[Book ID] 
GROUP BY o.[Student ID];
3) 开始更新:

UPDATE Credits c, Temp t set c.[Number of Credits] = c.[Number of Credits] + t.Credits
WHERE c.[Student ID] = t.[Student ID];
4) 保存并完成

有用:1";;
2)

您可以尝试使用临时表存储第二个和第三个表中的数据;执行以下操作:1)创建另一个第四个表(即临时表),其中包含两列:学生ID和学分;2)运行此脚本:

SELECT o.[Student ID], sum (b.Credits) as Credits INTO Temp 
FROM books b INNNER JOIN orders o
on b.[Book ID] = o.[Book ID] 
GROUP BY o.[Student ID];
3) 开始更新:

UPDATE Credits c, Temp t set c.[Number of Credits] = c.[Number of Credits] + t.Credits
WHERE c.[Student ID] = t.[Student ID];
4) 保存并完成

有用:1";;
2)

保存计算数据,尤其是聚合数据通常不是一个好主意。保存传入/传出交易记录,然后在需要时计算净余额。查看您得到的错误是什么?查询表达式中的语法错误保存计算数据(尤其是聚合数据)可能重复通常是个坏主意。保存传入/传出交易记录,然后在需要时计算净余额。查看您得到的错误是什么?查询表达式中的语法错误可能重复