2012-02-23 7 views
1

同じキー値を持つ別のテーブルの最大日付を持つあるテーブルの "mostRecentDate"フィールドを更新したいとします。簡略テーブルスキーマ:外部キーを持つ別のテーブルの最大値を持つテーブルのフィールドを更新

C(C_ID、mostRecentDate)(theDate L_ID、C_ID) L

L.c_idはC.c_idへの外部キー参照です。

Select MAX(theDate) 
FROM L 
Group by L.c_id 

は、各C_IDの最大の日付を与えるので、(発生したエラーは、何行に更新しない)私は

UPDATE C 
SET C.mostRecentDate= (SELECT Max(theDate) 
FROM L 
Where L.c_id = C.c_id 
Group by L.c_id) 

経由で更新しようとしました。しかし、このクエリは何もしません。私はMS Access 2003を使用しています。

答えて

4

これはAccess 2007で動作します。私は2003年にも動作するはずです。

UPDATE C 
SET mostRecentDate = DMax("theDate", "L", "c_id = " & C.c_id); 

用心あなたはLに存在しないCでC_ID値を持っている場合、mostRecentDateは、あなたがそれを阻止したい場合は、それは多くの作業がかかりますC.にその行にNULLに置き換えられます。

私はあなたはすでにあなたがL.

のGROUP BYクエリでテーブルLから
+0

お寄せいただきありがとうございます!私はSQL内でAccess関数を使用するとは思わなかった。私が最大の日付を保存する理由は、別の結合を行う必要がないようにするためです。最大の日付は、既にかなりの数の結合を含むクエリを使用してデータシートに埋め込まれており、結合の時間の複雑さは悪いです。私はこの場合、速度のために非冗長ストレージを犠牲にすることに決めました。 – Christine

+0

ようこそ。 UPDATEステートメントはAccessで難しいかもしれません。多くの試みが "更新可能なクエリを使用する必要があります"というエラーメッセージを表示します。ドメイン機能(DMax、DMin、DLookupなど)は、これらの状況のいくつかのための有効な回避策となります。 – HansUp

0

ここで副照会は必要ありません。これを試してみてください:

UPDATE C 
SET C.mostRecentDate= (SELECT Max(theDate) 
FROM L 
Where L.c_id = C.c_id) 
+2

これをあなたがそれらを必要とする任意の時間をそれらを取り出すことができることを知って、テーブルCにそれらの最大日付値を格納する値が表示されていないが2003年に失敗しました。更新可能なクエリメッセージを使用する必要があります。 – Taryn