2012-10-14 15 views
9

Microsoft Accessを使用しています。SQL内部結合からの更新

このクエリ場合:

(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 
+1

の場合あなたは 'UPDATE EXAMPLETABLE SET EXAMPLETABLE.FermentId = (JOINの発酵 INNER FROM FERMENT.FermentId を選択[ベルギービールのようなものを使用することができますよりも、私は、あなたが' EXAMPLETABLE'、あなたがから選択するものとの間の関係を必要と間違っていませんよ] オン FER MEL.FermentName = [BELGIUM BEER] .FermentId WHERE EXAMPLETABLE.relationFieldName = [BELGIUM BEER] .relationField ORDER BY [BELGIUM BEER] .BeerId) ' – xception

答えて

7

に参加構築しようとdoent場合 この

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

のようなものであるべき(登録しよう新しい値と更新したいテーブルとの間(EXAMPLETABLE)。

私はこのような何かをしようとするだろう。この場合:

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) 

この場合、サブクエリが複数の行を返すことはないことを保証する必要があります。

+1

Lol、私はちょっとした言葉でコメントに書きました。あなたは私の投票を持っています! – xception

+0

行を含む列かレコードですか? – user1534664

+0

行!サブクエリが複数の行を返す場合、SQLはテーブルを更新する値を知りません。 :-) – Gidil

15

あなたのデータとEXAMPLETABLEの関係が何であるかを確認してくださいが、一般的ではありません。

アクセスでは、SET部分が結合の後にあります。また、選択部分を次の順にスキップします。それは仕事がサブクエリは、あなたが接続するために、第2の鍵を必要とする複数の値を返すと仮定すると、クエリビルダ

3

2つのテーブルの間の関係を定義する必要はありません。回答10(Arnoldiusss)は、ほぼ正確で、はるかに理解しやすく、最短の解決策です。そして最速の実行です。しかし、このコード例は間違っています。次のコードは、私のアプリケーションのいずれかから来て、私は大好きです(「ベルギービールケース」にMSアクセス2013

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

で正常に実行さ表現;-)それがあろうと:

UPDATE FERMENT AS T1 
    INNER JOIN [BELGIUM BEER] AS T2 ON T1.FermentName = T2.FermentId 
    SET T1.FermentColumn1 = T2.FermentColumn1; 
関連する問題