Обновить поле в таблице с максимальным значением в другой таблице с помощью внешнего ключа - PullRequest
1 голос
/ 24 февраля 2012

Я хотел бы обновить поле «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 ]

4 голосов
/ 24 февраля 2012

Это работает в Access 2007. Я думаю, что оно должно работать и в 2003 году.

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

Осторожно, если у вас есть значение c_id в C, которого нет в L, большинствоRecentDate будет замененоНулевое значение для этой строки в C. Если вы хотите предотвратить это, потребуется больше работы.

Однако я не вижу значения сохранения этих максимальных значений даты в таблице C. Вы уже знаете, что можетеизвлекайте их из таблицы L в любое время, когда вам это нужно, с помощью запроса GROUP BY L.

0 голосов
/ 24 февраля 2012

Группировка в подзапросе здесь не нужна. Попробуйте это:

UPDATE C
SET C.mostRecentDate= (SELECT Max(theDate)
FROM L
Where L.c_id = C.c_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...