Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/05/2019, 19:06
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Copiar datos a una tabla desde una subconsulta

Cita:
Iniciado por durdi Ver Mensaje
Buenos dias,

Tengo un ejercicio propuesto en clase al que no consigo hacer funcionar correctamente. Le he dado mas vueltas, pero no consigo que actualice bien los datos. Os explico

Tengo que actualizar (UPDATE) los datos de una columna de una tabla(que actualmente están a NULL). Esos datos los obtengo a través de un SELECT y un INNER JOIN de 2 tablas.
Este SELECT me da una columna con los datos que tengo que pasar y todo va ok, pero lo que no consigo es que se "copien" en la tabla "original"

Esta sentencia me da la tabla:
Código SQL:
Ver original
  1. SELECT round((P.precio*Dped.cantidad),2) AS TotalPrecio
  2. FROM detalle_pedido Dped INNER JOIN plato P ON (Dped.plato=P.cod_plato);

He estado buscando y veo que para poder hacer lo que quiero, tengo que usar un alias en esta sentencia, para después usar el UPDATE, pero no hay manera.

Os dejo lo que tengo:
Código SQL:
Ver original
  1. UPDATE
  2.   detalle_pedido
  3. SET
  4.   total_linea = total_linea
  5. WHERE
  6.   total_linea = (
  7.     SELECT
  8.       total_linea
  9.     FROM
  10.       (
  11.         SELECT round((P.precio*Dped.cantidad),2) AS TotalPrecio FROM detalle_pedido Dped INNER JOIN plato P ON (Dped.plato=P.cod_plato)
  12.       )
  13.     AS total_linea
  14.   )
  15. ;

Muchas gracias
Estás escribiendo y leyendo la misma tabla en la misma consulta (que lalectura sea en una subconsulta es irrelevante, sigue siendo la misma query).
MySQL NO ADMITE realizar ese tipo de cosas. Eso ha sido siempre así, por consistencia de procesos kernel del DBMS. No es un problema de imposibilidad teórica, o de SQL, sino un tema de programación del nucleo de consultas de MySQL a nivel C++.

Para hacer lo que quieres te recomiendo usar stored procedures, o bien tablas de tipo TEMPORARY para almacenar los datos obtenidos en la subconsulta y luego usarlos en el UPDATE.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)