Escribí sobre algunos de los limitations of correlated subqueries en Access/JET SQL hace un tiempo, y tomé nota de la sintaxis para unir varias tablas para SQL ACTUALIZACIONES. Basándome en esa información y en algunas pruebas rápidas, no creo que haya forma de hacer lo que quiera con Access/JET en una sola instrucción SQL UPDATE. Si se pudiera, la declaración podría decir algo como esto:
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
Alternativamente, Acceso/JET a veces dejar pasar con el ahorro de una sub consulta como una consulta independiente y luego unirse a él en la instrucción UPDATE en una más tradicional camino. Así, por ejemplo, si salvamos la subconsulta SELECT anterior como una consulta independiente llamado FUNCTIONS_TAX, a continuación, la instrucción UPDATE sería:
UPDATE FUNCTIONS
INNER JOIN FUNCTIONS_TAX
ON FUNCTIONS.Func_ID = FUNCTIONS_TAX.Func_ID
SET FUNCTIONS.Func_TaxRef = FUNCTIONS_TAX.MinOfTax_Code
Sin embargo, esto todavía no funciona.
Creo que la única manera de que esto funcione es mover la selección y agregación del valor Tax_Code mínimo fuera de banda. Puede hacer esto con una función VBA, o más fácilmente usando la función Access DBookup. Guarde el GRUPO POR subconsulta anterior para una consulta con nombre FUNCTIONS_TAX separada y volver a escribir la instrucción UPDATE como:
UPDATE FUNCTIONS
SET Func_TaxRef = DLookup(
"MinOfTax_Code",
"FUNCTIONS_TAX",
"Func_ID = '" & Func_ID & "'"
)
Tenga en cuenta que la función DBúsq impide que esta consulta sea utilizado fuera de acceso, por ejemplo a través de OLEDB de JET. Además, el rendimiento de este enfoque puede ser bastante terrible según la cantidad de filas a las que apunte, ya que la subconsulta se ejecuta para cada fila de FUNCIONES (porque, por supuesto, ya no está correlacionada, que es el punto completo en orden para que funcione).
¡Buena suerte!
Normalmente puede convertir una consulta SELECT en una consulta de ACTUALIZAR con el clic de un botón en el diseñador de consultas de Access - hay un botón de "tipo de consulta" en la barra de comandos, cuando no está en la vista de SQL. Pruébelo, se ocupa de los requisitos de sintaxis. – Tomalak
Tu comentario parece un chiste. – mammadalius
¿Ves una carita sonriente detrás? No tengo el hábito de escribir comentarios de broma que abarcan varias líneas. – Tomalak