4

テーブル Original を Final の値で更新しようとしています。私は SQL の初心者ですが、さまざまなサンプルを自分のニーズに合わせて変更しようとして 2 時間この作業を続けてきました。アクセス2007を使用しています。

UPDATE 
  Original o
SET 
  o.[Assest Description] = (
    SELECT f.[Assest Description] FROM Original o, Final f 
    WHERE o.[Assest No] = f.[Assest No])
WHERE o.[Assest No] = Final.[Asset No]
4

3 に答える 3

9

あなたのselectステートメントが1行しか返さないかどうかはわかりません。select割り当て用のステートメントを使用してテーブルの更新を実行する場合は、1 行だけが返されるようにする必要があります。

それに加えて、次の解決策を検討できます。

update 
   Original as o
   inner join Final as f on o.[Assest No] = f.[Assest No]
set
   o.[Assest Description] = f.[Assest Description]

これは、 both がとテーブルの[Assest no]両方で一意のキーであり、それらが適切に関連付けられている場合にのみ正しく機能することに注意してください。OriginalFinal

于 2012-10-04T23:07:12.787 に答える
2

これを試して

UPDATE o 
SET o.[Assest Description] =  f.[Assest Description]
FROM Original o, Final f WHERE o.[Assest No] = f.[Assest No]
于 2012-10-04T23:02:07.827 に答える
0

アクセスはひどくうるさいです。更新するフィールドの名前を完全修飾すると、失敗する可能性があります。テーブルとフィールドの結合を完全に修飾しないと、「結合はサポートされていません」というメッセージが表示される場合があります。私が言っているのは、わずかに異なるバージョンが何か違うことをする可能性が高いからです。少なくともそれは私の経験です。

したがって、私の答えは、Create->Query Design から始めることです。2 つのテーブルを選択し、選択が正しく機能するようにします。次に、それを更新クエリに変更し、更新元のテーブルからフィールドを更新する列を更新します。
次に、SQL ビューに切り替え、それをモデルとして使用して、VBA でクエリを作成します。

私は構文的に正しい SQL ステートメントを持っていましたが、これを実行してから修飾フィールド名と非修飾フィールド名を正確に一致させるまで、JOIN はサポートされていないと主張しました。

于 2019-10-20T16:38:03.720 に答える