18

私はMicrosoftAccessを使用しています。

このクエリの場合:

(SELECT FERMENT.FermentId
FROM FERMENT
INNER JOIN [BELGIUM BEER]
ON
FERMENT.FermentName = [BELGIUM BEER].FermentId ORDER BY [BELGIUM BEER].BeerId) a

FermentIdを返しますが、その列で別のテーブルを更新するにはどうすればよいですか?

例:

UPDATE EXAMPLETABLE
SET EXAMPLETABLE.FermentId = a.FermentId
FROM a
(SELECT FERMENT.FermentId
FROM FERMENT
INNER JOIN [BELGIUM BEER]
ON
FERMENT.FermentName = [BELGIUM BEER].FermentId ORDER BY [BELGIUM BEER].BeerId) a
4

3 に答える 3

26

あなたのデータとEXAMPABLEの関係が何であるかはわかりませんが、一般的には.

Access では、SET 部分は join の後にあり、select 部分も order by でスキップします。このようなものでなければなりません

UPDATE FERMENT
INNER JOIN ([BELGIUM BEER]  ON FERMENT.FermentName = [BELGIUM BEER].FermentId) 
SET EXAMPLETABLE.FermentColumn = a.FermentColumn

うまくいかない場合は、クエリビルダーで結合を構築してみてください

于 2012-10-14T12:57:35.847 に答える
12

2 つのテーブル間の関係を定義する必要はありません。回答 10 (Arnoldiusss) はほぼ正解であり、最も理解しやすく最短の解決策です。そして最速の実行。しかし、サンプルコードは間違っています。次のコードは、私のアプリケーションの 1 つからのもので、MS ACCESS 2013 で正常に動作します。

    UPDATE table1 T1 
    INNER JOIN table2 T2 
    ON T2.Id = T1.Id
    SET T1.myField = T2.myField;

「the Belgian Beer Case」(私はその表現が大好きです ;-) の場合、次のようになります。

    UPDATE FERMENT AS T1
    INNER JOIN [BELGIUM BEER] AS T2 ON T1.FermentName = T2.FermentId 
    SET T1.FermentColumn1 = T2.FermentColumn1;
于 2015-12-20T10:22:13.510 に答える
7

サブクエリが複数の値を返すと仮定すると、新しい値と更新するテーブル (EXAMPLETABLE) を接続 (JOIN) するための 2 つ目のキーが必要になります。

この場合、私は次のようなことを試します:

UPDATE T 
SET    T.FERMENTID = A.FERMENTID 
FROM   EXAMPLETABLE AS T 
       INNER JOIN (SELECT FERMENT.FERMENTID, 
                          FERMENT.OTHERID 
                   FROM   FERMENT 
                          INNER JOIN [BELGIUM BEER] 
                                  ON FERMENT.FERMENTNAME = 
                                     [BELGIUM BEER].FERMENTID 
                   ORDER  BY [BELGIUM BEER].BEERID) AS A 
               ON A.OTHERID = T.OTHERID 

これが当てはまらず、サブクエリが単一の値を返す場合は、次のようにしてみてください。

UPDATE EXAMPLETABLE 
SET    T.FERMENTID = (SELECT FERMENT.FERMENTID
                      FROM   FERMENT 
                             INNER JOIN [BELGIUM BEER] 
                                     ON FERMENT.FERMENTNAME = 
                                        [BELGIUM BEER].FERMENTID 
                      ORDER  BY [BELGIUM BEER].BEERID)

この場合、サブクエリが決して複数の行を返さないことを保証する必要があることに注意してください!

于 2012-10-14T12:59:52.327 に答える