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

algo esta mal con este query

Estas en el tema de algo esta mal con este query en el foro de Mysql en Foros del Web. tengo un problema que no he podido resolver con este query, resulta que con el valor que tiene "920" no me realiza la sumatoria sino ...
  #1 (permalink)  
Antiguo 15/04/2008, 16:12
 
Fecha de Ingreso: abril-2008
Mensajes: 40
Antigüedad: 16 años
Puntos: 0
algo esta mal con este query

tengo un problema que no he podido resolver con este query, resulta que con el valor que tiene "920" no me realiza la sumatoria sino que da el valor de una sola columna, pero con otro valor por ejemplo "950B#1" si hace la suma bien. hago una modificacion y quito del query la parte "and r.codigo_reporte=dtc.codigo_reporte " y pasa lo contrario, osea que hace la sumatoria bien para "920" , pero para "950B#1" el valor es el doble del que deberia ser

sum(gasolina) as g, sum(aceite_motor)as am, sum(aceite_transmision) as atr,
sum(aceite_hdco) as ah, sum(grasa) as gr from reporte as r, detalle_equipos_consumo as dtc, equipos as e
where dtc.codigo_equipo='920' and r.codigo_reporte=dtc.codigo_reporte and e.codigo_equipo=r.codigo_equipo and
dtc.codigo_equipo=r.codigo_equipo group by dtc.codigo_equipo asc;

no se como hacer para que me haga la suma exacta de las columnas, todos los valores son de tipo double. gracias por la ayuda
  #2 (permalink)  
Antiguo 16/04/2008, 00:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: algo esta mal con este query

Cita:
Iniciado por clavijo83 Ver Mensaje
tengo un problema que no he podido resolver con este query, resulta que con el valor que tiene "920" no me realiza la sumatoria sino que da el valor de una sola columna, pero con otro valor por ejemplo "950B#1" si hace la suma bien. hago una modificacion y quito del query la parte "and r.codigo_reporte=dtc.codigo_reporte " y pasa lo contrario, osea que hace la sumatoria bien para "920" , pero para "950B#1" el valor es el doble del que deberia ser

sum(gasolina) as g, sum(aceite_motor)as am, sum(aceite_transmision) as atr,
sum(aceite_hdco) as ah, sum(grasa) as gr from reporte as r, detalle_equipos_consumo as dtc, equipos as e
where dtc.codigo_equipo='920' and r.codigo_reporte=dtc.codigo_reporte and e.codigo_equipo=r.codigo_equipo and
dtc.codigo_equipo=r.codigo_equipo group by dtc.codigo_equipo asc;

no se como hacer para que me haga la suma exacta de las columnas, todos los valores son de tipo double. gracias por la ayuda
Se me ocurre preguntarte cómo pueden tener la misma naturaleza 920 y 950B#1; ¿son datos del mismo tipo da campo? ¿se trata de un campo numérico o varchar? porque si es numérico es lógico que el segundo dato te dé problemas y si es texto las consultas con = harán encuentre uno y no otro, por no hablar de los problemas a la hora de establecer las relaciones. Dejo al margen el tema de las relaciones con INNER JOIN o WHERE = con índices PK FK. Pon la estructura de tu base, las relaciones entre las tablas y precisa algo la naturaleza de los campos. Creo que podremos ayudarte mejor.
  #3 (permalink)  
Antiguo 16/04/2008, 02:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: algo esta mal con este query

Código:
SELECT 
     sum(gasolina) as g, sum(aceite_motor)as am, 
     sum(aceite_transmision) as atr,sum(aceite_hdco) as ah, 
     sum(grasa) as gr 
from reporte as r, detalle_equipos_consumo as dtc, equipos as e 
where dtc.codigo_equipo='920' 
           and r.codigo_reporte=dtc.codigo_reporte 
           and e.codigo_equipo=r.codigo_equipo 
          and dtc.codigo_equipo=r.codigo_equipo 
group by dtc.codigo_equipo asc;
El quid de la cuestion esta en ver como relacionas la tablas. Las condiciones en rojo formanrian parte de la definicion de las relaciones JOIN ON condicion la azul seria un HAVING condición.


Código:
SELECT 
     sum(gasolina) as g, sum(aceite_motor)as am, 
     sum(aceite_transmision) as atr,sum(aceite_hdco) as ah, 
     sum(grasa) as gr 
FROM ( equipos as e INNER JOIN detalle_equipos_consumo as dtc 
                  ON e.codigo_equipo=dtc.codigo_equipo) 
                             INNER JOIN reporte as r  
                  ON e.codigo_equipo=r.codigo_equipo 
                       //AND dtc.codigo_equipo=r.codigo_equipo <--- sobra
HAVING dtc.codigo_equipo='920'
group by dtc.codigo_equipo asc;
Creo?


Quim
  #4 (permalink)  
Antiguo 16/04/2008, 07:46
 
Fecha de Ingreso: abril-2008
Mensajes: 40
Antigüedad: 16 años
Puntos: 0
Re: algo esta mal con este query

gracias por la ayuda, el problema no era la consulta, no sumaba los valores de "920" porque habia uno que no era "920" sino "921" y eso me paso por modificar la bd manualmente y no tenerla con llaves foraneas(lo cual no me hubiese dejado hacer ese cambio), sim embargo gracias por que entendi como usar el INNER JOIN.
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 06:53.