2017-08-05 8 views
-1

私のタイトルはあいまいであることをお詫び申し上げます。私はマイクロソフトのアクセスを使用しており、私は合計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]; 
+0

[クエリを更新して、別のテーブルの値に基づいてあるテーブルのカラムの既存の値を変更する](https://stackoverflow.com/questions/45526753/update-query-to-change)存在する値の1つのテーブルにあるテーブルの値) – Gustav

+0

なぜクレジットは選択クエリではなくテーブルでなければならないのですか? – tahwos

答えて

0

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] 
           ); 
+0

JOIN操作で構文エラーが発生する –

+0

なんらかの理由で、UPDATE文に構文エラーが発生しています –

0

あなたは2番目と3番目のテーブルからデータを格納するためTEMPテーブルを使用しようとすることができます。 次のようにします。 1)Student IDCreditsの2つの列を持つ別の4番目のテーブル(つまりTemp)を作成します。 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)"Operation must use an updateable query" error in MS Access; 2)MS Access database (2010) how to create temporary table/procedure/view from Query Designer

関連する問題