Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Copiar datos a una tabla desde una subconsulta

Estas en el tema de Copiar datos a una tabla desde una subconsulta en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 04/04/2019, 23:52
 
Fecha de Ingreso: enero-2014
Ubicación: Málaga
Mensajes: 13
Antigüedad: 10 años, 10 meses
Puntos: 0
Copiar datos a una tabla desde una subconsulta

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

Última edición por gnzsoloyo; 03/05/2019 a las 19:02
  #2 (permalink)  
Antiguo 01/05/2019, 07:53
 
Fecha de Ingreso: noviembre-2014
Ubicación: peru-lima
Mensajes: 32
Antigüedad: 10 años
Puntos: 2
Respuesta: Copiar datos a una tabla desde una subconsulta

-- SELECT round((P.precio*Dped.cantidad),2)......
-- como resultado le dí 30

-- estás haciendo esto
( select total_linea from (30) as total_linea )
-- trata esto
( select (30) as total_linea )


-- este es tu update
UPDATE
detalle_pedido
SET
total_linea = total_linea
WHERE
total_linea = (select (30) as total_linea)
;

-- acá actualizas lo que están en null
UPDATE
detalle_pedido
SET
total_linea = (30)
WHERE
total_linea is null
;
  #3 (permalink)  
Antiguo 03/05/2019, 19:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
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)

Etiquetas: funcion, select, subconsulta, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:17.