Cita:
Iniciado por durdi
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 originalSELECT round((P.precio*Dped.cantidad),2) AS TotalPrecio
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 originalUPDATE
detalle_pedido
SET
total_linea = total_linea
WHERE
total_linea = (
SELECT
total_linea
FROM
(
SELECT round((P.precio*Dped.cantidad),2) AS TotalPrecio FROM detalle_pedido Dped INNER JOIN plato P ON (Dped.plato=P.cod_plato)
)
AS total_linea
)
;
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.