使用外键更新表中具有最大值的表中的字段

时间:2012-02-23 23:34:35

标签: sql ms-access

我想更新一个表中的“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。

2 个答案:

答案 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)
相关问题