Я писал о некоторых ограничениях коррелированных подзапросов в Access / JET SQL некоторое время назад и отметил синтаксис для объединения нескольких таблиц для SQL UPDATE. Основываясь на этой информации и некотором быстром тестировании, я не верю, что есть какой-либо способ сделать то, что вы хотите, с помощью Access / JET в одном выражении SQL UPDATE. Если бы вы могли, заявление выглядело бы примерно так:
UPDATE FUNCTIONS A
INNER JOIN (
SELECT AA.Func_ID, Min(BB.Tax_Code) AS MinOfTax_Code
FROM TAX BB, FUNCTIONS AA
WHERE AA.Func_Pure<=BB.Tax_ToPrice AND AA.Func_Year= BB.Tax_Year
GROUP BY AA.Func_ID
) B
ON B.Func_ID = A.Func_ID
SET A.Func_TaxRef = B.MinOfTax_Code
В качестве альтернативы Access / JET иногда позволяет вам избежать сохранения подзапроса в виде отдельного запроса и последующего присоединения его к выражению UPDATE более традиционным способом. Так, например, если мы сохранили вышеприведенный подзапрос SELECT как отдельный запрос с именем FUNCTIONS_TAX, то оператор UPDATE будет выглядеть так:
UPDATE FUNCTIONS
INNER JOIN FUNCTIONS_TAX
ON FUNCTIONS.Func_ID = FUNCTIONS_TAX.Func_ID
SET FUNCTIONS.Func_TaxRef = FUNCTIONS_TAX.MinOfTax_Code
Однако, это все еще не работает.
Я полагаю, что единственный способ выполнить эту работу - это перенести выбор и агрегацию минимального значения Tax_Code за пределы диапазона. Вы можете сделать это с помощью функции VBA или проще с помощью функции Access DLookup. Сохраните вышеприведенный подзапрос GROUP BY в отдельный запрос с именем FUNCTIONS_TAX и перепишите инструкцию UPDATE как:
UPDATE FUNCTIONS
SET Func_TaxRef = DLookup(
"MinOfTax_Code",
"FUNCTIONS_TAX",
"Func_ID = '" & Func_ID & "'"
)
Обратите внимание, что функция DLookup предотвращает использование этого запроса вне Access, например, через JET OLEDB. Кроме того, производительность этого подхода может быть довольно ужасной в зависимости от того, сколько строк вы нацеливаете, так как подзапрос выполняется для каждой строки FUNCTIONS (потому что, конечно, он больше не коррелирован, что является целым пунктом в порядке чтобы это работало).
Удачи!