Re: update a partir de un select
Ya he encontrado como hacerlo funcionar, y es la forma más simple (una vez sabido, todo es fácil), te pego aquí el código por si le sirve a alguien:
DROP TEMPORARY TABLE IF EXISTS temp_puntosusuarios;
CREATE TEMPORARY TABLE temp_puntosusuarios
select usuarios.id_usuario,
obtener_puntos_obtenidos_usuario(usuarios.id_usuario) AS puntos_obtenidos,
obtener_puntos_redimidios_usuario(usuarios.id_usuario) AS puntos_redimidos,
obtener_saldo_actual_usuario(usuarios.id_usuario, up.id_pais) AS puntos_disponibles,
obtener_puntos_caducan_anio_actual(usuarios.id_usuario) AS puntos_caducan_este_anio,
obtener_puntos_caducan_202010131_func(usuarios.id_usuario) AS puntos_caducan_mayo
from usuarios
left join usuarios_paises up on up.id_usuario = usuarios.id_usuario
where usuarios.id_perfil IN (2,6,11,7,8,9,10,13)
and usuarios.id_usuario <> 624;
UPDATE tmp_puntos_usuarios, temp_puntosusuarios
SET
tmp_puntos_usuarios.id_usuario = temp_puntosusuarios.id_usuario,
tmp_puntos_usuarios.puntos_obtenidos = temp_puntosusuarios.puntos_obtenidos,
tmp_puntos_usuarios.puntos_redimidos = temp_puntosusuarios.puntos_redimidos,
tmp_puntos_usuarios.puntos_disponibles = temp_puntosusuarios.puntos_disponibles,
tmp_puntos_usuarios.puntos_caducan_este_anio = temp_puntosusuarios.puntos_caducan_este_anio,
tmp_puntos_usuarios.puntos_caducan_mayo = temp_puntosusuarios.puntos_caducan_mayo
WHERE tmp_puntos_usuarios.id_usuario = temp_puntosusuarios.id_usuario;
Con estas 2 instrucciones consigo primero crear la tabla temporal y rellenarla y luego actualizar la tabla física sin problema.
Un saludo
--
Manuel Ruiz-Falcó Couto