** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Actualizar con el valor Max de otra tabla
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoActualizar con el valor Max de otra tabla

 Responder Responder
Autor
Mensaje
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Tema: Actualizar con el valor Max de otra tabla
    Enviado: 20/Agosto/2025 a las 12:31

Hola. ¿Cómo puedo actualizar una tabla por el valor máximo de otra tabla? Todos los intentos me dan error porque la consulta no es actualizable.

Quiero actualizar en la tabla GeneralPedidos el IdEstado por el valor máximo del IdEstado de la tabla EstadosPedidos y agrupado además por el ID, porque EstadosPedidos puede tener varias filas con el mismo ID (no sé si me explico), algo así:

UPDATE GeneralPedidos
INNER JOIN EstadosPedidos ON GeneralPedidos.Id=EstadosPedidos.Id
SET GeneralPedidos.IdEstado = (SELECT MAX(IdEstado) FROM EstadosPedidos)

La única solución que he encontrado es crear una tabla nueva "MaxEstados" solo por los valores máximos IdEstado de la tabla EstadosPedidos agrupado por ID y luego a su vez, ahora sí me deja, actualizar GeneralPedidos con esa tabla ¿pero no hay otra forma en access?

y cada vez que paso el procedimiento, ante tengo que borrarla: DELETE * FROM MaxEstados

INSERT INTO MaxEstados(Id,IdEstado) SELECT Id, Max(IdEstado) FROM EstadosPedidos GROUP BY Id

UPDATE GeneralPedidos INNER JOIN MaxEstados ON GeneralPedidos.Id= MaxEstados.Id
SET GeneralPedidos.IdEstado = MaxEstados.IdEstado


Muchas gracias, 

Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Enlace directo a este mensaje Enviado: 20/Agosto/2025 a las 14:56
Hola,

¿Y si en lugar de una consulta de 2 tablas utilizas una función agregada de dominio?

UPDATE GeneralPedidos
SET GeneralPedidos.IdEstado = DMax("IdEstado", "EstadosPedidos", "Id=" & GeneralPedidos.Id)º

Nota 1: escrito al vuelo
Nota 2: los experimentos con gaseosa

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 20/Agosto/2025 a las 15:16

Hola xavi, gracias lo que pasa que esa función tarda mucho y no me compensa :(
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 20/Agosto/2025 a las 16:15
La SELECT debe ser algo así:

GeneralPedidos
INNER JOIN (SELECT Id,  MAX(IdEstado) AS ValorMax FROM EstadosPedidos GROUP BY Id) AS T1
     ON GeneralPedidos.Id = T1.Id

Sorry, no puedo probarlo ... 
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 20/Agosto/2025 a las 18:29

hola, gracias Mihura pero me da error de sintaxis:

Update GeneralPedidos
INNER JOIN (SELECT Id,  MAX(IdEstado) AS ValorMax FROM EstadosPedidos GROUP BY Id) AS T1
     ON GeneralPedidos.Id = T1.Id
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 20/Agosto/2025 a las 21:06
Lo primero que yo haría es generar la SELECT y 'cuadrar' la consulta, ya la convertirás en una de actualización más adelante.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 25/Agosto/2025 a las 09:48

Hola, el select sería este pero ya digo, no permite la actualización:

SELECT EstadosPedidos.Id, Max(EstadosPedidos.IdEstado) FROM EstadosPedidos GROUP BY EstadosPedidos.Id
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1536
Enlace directo a este mensaje Enviado: 25/Agosto/2025 a las 17:56
Hola.


[...]
Cuando la consulta calcula una suma, un promedio, un recuento u otro tipo de total en los valores de un campo, no se pueden actualizar los datos de la consulta. Además, no se puede actualizar una consulta que haga referencia a un campo de la fila Actualizar a desde una ficha cruzada, una consulta, una consulta de selección o una subconsulta que contenga totales o funciones agregadas.
[...]

Me temo que tendrás que seguir con la tabla temporal o usar la función de dominio como indicó Xavi.


Editado por pitxiku - 25/Agosto/2025 a las 17:57
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 27/Agosto/2025 a las 14:31

Hola, gracias. Vaya, que no hay manera. Muchas gracias 

Este hilo se puede cerrar

Saludos,
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 02/Septiembre/2025 a las 11:52
hola, pueden cerrar el hilo, muchas gracias.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable