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

update con suma

Estas en el tema de update con suma en el foro de Mysql en Foros del Web. hola amios quiero hacer un update con otro campo que salga sumado de otra tabla. El campo yo encontre esto en la red @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 10/07/2013, 14:15
 
Fecha de Ingreso: agosto-2009
Ubicación: Lima
Mensajes: 226
Antigüedad: 14 años, 8 meses
Puntos: 3
update con suma

hola amios quiero hacer un update con otro campo que salga sumado de otra tabla.
El campo

yo encontre esto en la red
Código MySQL:
Ver original
  1. UPDATE XXX SET XXX.TOTAL=(SELECT SUM(algun_campo) FROM YYY);

pero esto es para un solo campo de un registro, si yo quisiera actualizar varios campos de varios resultados asi como lo hice en sql server
Código MySQL:
Ver original
  1. update meta m
  2. (select sum(round(ifnull(total,0),0)) tot, idMeta from metacos  u left join metacc cc on cc.idTar = u.idTar
  3. where estado='0' and cc.est_tar='0'
  4. group by idMeta) T on T
  5. set monto= T.tot
  6. where m.id_met = T.idMeta
  7. and m.estado_me='0'
  8. and m.ano=2013


como seria la sintaxis


GRACIAS!!!!

Última edición por gnzsoloyo; 10/07/2013 a las 14:24
  #2 (permalink)  
Antiguo 10/07/2013, 14:29
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: update con suma

Hola hicolu:

El update con múltiples tablas trabaja de manera semejante a como lo hace SQL Server. Del manual de referencia:

http://dev.mysql.com/doc/refman/5.0/es/update.html

Cita:
Puede realizar operaciones UPDATE que cubran varias tablas. La parte table_references lista las tablas involucradas en el join. Su sintaxis se describe ámpliamente en Sección 13.2.7.1, “Sintaxis de JOIN”. Aquí hay un ejemplo:

Código:
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
Este ejemplo muestra un inner join usando el operador coma, pero los comandos UPDATE de múltiples tablas pueden usar cualquier tipo de join permitido en comandos SELECT tales como LEFT JOIN.
Haz la prueba y nos comentas... si tienes problemas, postea lo que intentaste hacer y si marca algún error, dinos qué error es el que marca. Si el UPDATE no marca error, pero no hace lo que debería, postea algunos datos de ejemplo de cada una de tus tablas y con gusto te ayudamos a afinar la consulta

Saludos
Leo.
  #3 (permalink)  
Antiguo 10/07/2013, 14:57
 
Fecha de Ingreso: agosto-2009
Ubicación: Lima
Mensajes: 226
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: update con suma

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola hicolu:

El update con múltiples tablas trabaja de manera semejante a como lo hace SQL Server. Del manual de referencia:

http://dev.mysql.com/doc/refman/5.0/es/update.html



Haz la prueba y nos comentas... si tienes problemas, postea lo que intentaste hacer y si marca algún error, dinos qué error es el que marca. Si el UPDATE no marca error, pero no hace lo que debería, postea algunos datos de ejemplo de cada una de tus tablas y con gusto te ayudamos a afinar la consulta

Saludos
Leo.

Ojo Leo, puse sumatoria, no es un simple update
  #4 (permalink)  
Antiguo 10/07/2013, 15:31
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: update con suma

Cita:
Ojo Leo, puse sumatoria, no es un simple update
Ojo hicolu, ¿tan siquiera hiciste el intento por hacer el UPDATE?, sinceramente lo dudo, porque de haberlo hecho te habrías dado cuenta que es exactamente lo mismo que con SQL...

Como se muestra en el manual:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1;
  2. +-------------+-------+
  3. | descripcion | total |
  4. +-------------+-------+
  5. | uno         |     0 |
  6. | dos         |     0 |
  7. | tres        |     0 |
  8. +-------------+-------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM tabla2;
  12. +-------------+---------+
  13. | descripcion | parcial |
  14. +-------------+---------+
  15. | uno         |      10 |
  16. | dos         |      20 |
  17. | uno         |       3 |
  18. | dos         |       7 |
  19. +-------------+---------+
  20. 4 rows in set (0.00 sec)
  21.  
  22. mysql> UPDATE tabla1 T1,
  23.     ->        ( SELECT descripcion, SUM(parcial) total
  24.     ->         FROM tabla2
  25.     ->         GROUP BY descripcion ) T2
  26.     -> SET T1.total = T2.total
  27.     -> WHERE T1.descripcion = T2.descripcion;
  28. Query OK, 2 rows affected (0.03 sec)
  29. Rows matched: 2  Changed: 2  Warnings: 0
  30.  
  31. mysql> SELECT * FROM tabla1;
  32. +-------------+-------+
  33. | descripcion | total |
  34. +-------------+-------+
  35. | uno         |    13 |
  36. | dos         |    27 |
  37. | tres        |     0 |
  38. +-------------+-------+
  39. 3 rows in set (0.00 sec)

Utilizando JOIN's:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1;
  2. +-------------+-------+
  3. | descripcion | total |
  4. +-------------+-------+
  5. | uno         |     0 |
  6. | dos         |     0 |
  7. | tres        |     0 |
  8. +-------------+-------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM tabla2;
  12. +-------------+---------+
  13. | descripcion | parcial |
  14. +-------------+---------+
  15. | uno         |      10 |
  16. | dos         |      20 |
  17. | uno         |       3 |
  18. | dos         |       7 |
  19. +-------------+---------+
  20. 4 rows in set (0.00 sec)
  21.  
  22. mysql> UPDATE tabla1 T1 LEFT JOIN
  23.     ->        ( SELECT descripcion, SUM(parcial) total
  24.     ->          FROM tabla2
  25.     ->          GROUP BY descripcion ) T2 ON T1.descripcion = T2.descripcion
  26.     -> SET T1.total = T2.total;
  27. Query OK, 3 rows affected (0.03 sec)
  28. Rows matched: 3  Changed: 3  Warnings: 0
  29.  
  30. mysql> SELECT * FROM tabla1;
  31. +-------------+-------+
  32. | descripcion | total |
  33. +-------------+-------+
  34. | uno         |    13 |
  35. | dos         |    27 |
  36. | tres        |  NULL |
  37. +-------------+-------+
  38. 3 rows in set (0.00 sec)

Y OJO también, te puse al final:

Cita:
Haz la prueba y nos comentas... si tienes problemas, postea lo que intentaste hacer y si marca algún error, dinos qué error es el que marca. Si el UPDATE no marca error, pero no hace lo que debería, postea algunos datos de ejemplo de cada una de tus tablas y con gusto te ayudamos a afinar la consulta
Saludos
Leo.
  #5 (permalink)  
Antiguo 10/07/2013, 16:06
 
Fecha de Ingreso: agosto-2009
Ubicación: Lima
Mensajes: 226
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: update con suma

Leo GRACIAS por tu colaboración solo un detalle mas

asi me actualiza toda la tbla T1, si funca, todo OK!
Código MySQL:
Ver original
  1. UPDATE meta T1
  2.      ( SELECT idMeta, SUM(total) total
  3.             FROM metacostou
  4.              GROUP BY idMeta ) T2 ON T1.id_met = T2.idMeta
  5.     SET T1.monto = T2.total;

pero cuando le pongo una condición mas, así como se muestra

Código MySQL:
Ver original
  1. UPDATE meta T1
  2.      ( SELECT idMeta, SUM(total) total
  3.             FROM metacostou
  4.              GROUP BY idMeta ) T2 ON T1.id_met = T2.idMeta
  5.     SET T1.monto = T2.total;
  6. where T1.fase = 'R'  and T1.ano='2013'

no funca, me sale este error:

>[Error] Líneas de script: 27-35 --------------------
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where T1.fase = 'R'' at line 7

Advertencias: --->
W (1): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where T1.fase = 'R'' at line 7
<---
[Ejecutado: 10/07/13 05:08:50 PM COT] [Ejecución: 0ms]

Última edición por gnzsoloyo; 10/07/2013 a las 17:32 Razón: Usar Highlight "MySQL", por favor...
  #6 (permalink)  
Antiguo 10/07/2013, 17:33
Avatar de 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, 5 meses
Puntos: 2658
Respuesta: update con suma

Tienes un punto y coma en el SET que no debe estar allí
Código MySQL:
Ver original
  1. SET T1.monto = T2.total;
El punto y coma es cierre de sentencia (igual que en Oracle), por lo que en realidad el WHERE terminaría perteneciendo a una consulta distinta...
Elimínalo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 11/07/2013, 10:37
 
Fecha de Ingreso: agosto-2009
Ubicación: Lima
Mensajes: 226
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: update con suma

Cita:
Iniciado por gnzsoloyo Ver Mensaje
tienes un punto y coma en el set que no debe estar allí
Código mysql:
Ver original
  1. set t1.monto = t2.total;
el punto y coma es cierre de sentencia (igual que en oracle), por lo que en realidad el where terminaría perteneciendo a una consulta distinta...
Elimínalo.
muchas gracias leonardo y gnzsoloyo, me funciono perfecto sin el punto y coma

saludos cordiales

Etiquetas: select
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 06:13.