Обновить запрос для изменения существующих значений для столбца в одной таблице на основе значений из другой таблицы

Я прошу прощения за то, что мой заголовок нечеткий, поскольку мне всегда сложно описать, что нужно делать, когда дело доходит до SQL. Я использую доступ к Microsoft, и у меня есть в общей сложности 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]; 

У вас есть запятая с ON . Можешь попробовать:

 UPDATE Credits as c INNER JOIN (SELECT o.[Student ID], SUM(b.Credits) as Credits FROM Orders as o INNER JOIN Books as b ON o.[Book ID] = b.[Book ID] GROUP BY o.[Student ID] ) ob ON c.[Student ID] = o.[Student ID] SET c.[Number of Credits] = c.[Number of Credits] + ob.Credits; 

Мне часто кажется, что у меня проблемы с синтаксисом соединения для работы с MS Access. Вместо:

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

Вы можете попытаться использовать таблицу TEMP для хранения ваших данных со 2-й и 3-й таблиц; Сделайте так: 1) создайте еще одну 4-ю таблицу (т.е. Temp) с двумя столбцами: Student ID и Credits ; 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) Ошибка «Операция должна использовать обновляемый запрос» в MS Access ; 2) База данных MS Access (2010), как создать временную таблицу / процедуру / представление из Query Designer