Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: ssccaann43 © en 21 Mayo 2010, 16:57 pm



Título: Problema con Update y Select
Publicado por: ssccaann43 © en 21 Mayo 2010, 16:57 pm
Bien me gustaria saber si es posible hacer algo asi...

Código
  1.  
  2. UPDATE    tbl_reporte_temporal
  3. SET              (existencia_inicial) =
  4.                          (SELECT     SUM(tbl_DcierreInventario.Existencia_I) AS Existencia
  5.                            FROM          tbl_reporte_temporal
  6.                            WHERE      (tbl_DcierreInventario.CodAlmacen = '1') AND (tbl_DcierreInventario.fechacierre = '17/05/2010')
  7.                            GROUP BY tbl_DcierreInventario.coditems)
  8. WHERE     tbl_DcierreInventario.coditems = tbl_reporte_temporal.coditems
  9.  
  10.  

Ese codigo me da error...! Y requiero hacer un update a una tabla, haciendo un select de otra...!


Título: Re: Problema con Update y Select
Publicado por: ^Tifa^ en 21 Mayo 2010, 18:14 pm
Yo que tu tendria mucho cuidado con la clausula
Código
  1. GROUP BY `campo`
sobretodo porque sabemos que al hacer
Código
  1. SET `campo` =
estamos peticionando y asignando 1 solo valor, y GROUP BY retorna mas de 1 registro :( (independientemente que hagas SUM(`campo`) previamente) por el GROUP BY sera la suma total de todos los registros distintos, por ende retorna mas de 1.

Otra cosita veo que haces:

Código
  1. UPDATE    tbl_reporte_temporal
  2.  

sin embargo al finalizar haces:

Código
  1. WHERE     tbl_DcierreInventario.coditems = tbl_reporte_temporal.coditems
  2.  

En que momento referenciaste o relacionaste con la tabla tbl_DcierreInventario  ????

La misma pregunta para:

Código
  1. SELECT     SUM(tbl_DcierreInventario.Existencia_I) AS Existencia
  2.                            FROM          tbl_reporte_temporal
  3.                            WHERE      (tbl_DcierreInventario.CodAlmacen = '1') AND (tbl_DcierreInventario.fechacierre = '17/05/2010')
  4.                            GROUP BY tbl_DcierreInventario.coditems
  5.  

Me pierdo :( no hay JOINS aca entonces como referencias campos de otras tablas :(

Sabes a lo que me refiero con lo anterior ;) lo que puedo pensar, que seguro te confundiste al postear la consulta SQL aqui, y realmente es otra :P


Título: Re: Problema con Update y Select
Publicado por: ssccaann43 © en 21 Mayo 2010, 20:41 pm
Hola preciosa, si tenia una sopa de confuciones alli...

Pero logre solventarlo, mucho antes de que postearas, solo que estoy tan metido con el proyecto que se me paso por alto dar el resultado por si alguien lo requiere...

Código
  1. UPDATE tbl_reporte_temporal  SET existencia_inicial = tbl_DcierreInventario.Existencia_I  FROM tbl_DcierreInventario  WHERE tbl_reporte_temporal.coditems = tbl_DcierreInventario.coditems AND  tbl_DcierreInventario.CodAlmacen='1' AND  tbl_DcierreInventario.fechacierre='17/05/2010'
  2.  

No estoy usando el Group By, ya que estaba incorrecto, tenia una Confusión en la data puesto que pensaba que existian varios registros en la misma fecha, pero era falso... :rolleyes:


Título: Re: Problema con Update y Select
Publicado por: ^Tifa^ en 22 Mayo 2010, 17:05 pm
Hola niño    :-*

De haber existido varios valores repetidos con la misma fecha, hubieras utilizado la clausula GROUP BY en el campo fecha  :rolleyes:  en vez del que tenia previamente, pero esta sugerencia de mi parte no se que tanto te hubiera ayudado, puesto que el motor si hubieras agrupado por esa unica fecha que asumias existian varios registros, iba a retornarte el primer registro que encontrara con la fecha especificada por ti aca:

Código
  1. AND (tbl_DcierreInventario.fechacierre = '17/05/2010')
  2.  

De haber tenido una tabla asi:

campo                  campo
1                           2010/10/23
2                           2010/11/20
3                           2009/08/27
4                           2010/10/23
5                           2010/10/23

El motor te hubiera retornado el campo (1) aun teniendo la misma data en el campo 4 y 5.
Ahora, si tu eliminaras el campo (1) y vuelves a peticionar con GROUP BY en la fecha, el motor te retornaria el campo (4) ya que seria el primer registro que encontrase con ese valor  ;) y asi sucesivamente.

A lo mejor es redundante especificar lo anterior puesto que no lo preguntaste ni mucho menos, pero lo dejo claro por si alguien asume usar GROUP BY en situaciones similares sobre un campo en especifico, que tenga en cuenta el registro real que el motor le retornaria.