我想更新一个表中的“mostRecentDate”字段,其中另一个表中的最大日期具有相同的键值。简化的表模式:
C(c_id,mostRecentDate) L(l_id,c_id,theDate)
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。
答案 0 :(得分:4)
这个适用于Access 2007.我认为它也应该在2003年运行。
UPDATE C
SET mostRecentDate = DMax("theDate", "L", "c_id = " & C.c_id);
请注意,如果C中的c_id值不存在于L中,则对于C中的该行,mostRecentDate将替换为Null。如果要防止这种情况,则需要更多工作。
但是我没有看到在表C中存储这些最大日期值的值。您已经知道,只要您需要使用GROUP BY查询L,就可以从表L中检索它们。
答案 1 :(得分:0)
此处不需要子查询中的分组。试试这个:
UPDATE C
SET C.mostRecentDate= (SELECT Max(theDate)
FROM L
Where L.c_id = C.c_id)