Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2004
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
Unhappy Por Favor verifiquen esta consulta pues no veo el error.

Hola miren yo hago la siguiente consulta:
Código:
SELECT SUM(APORTACION.PAGO) 
FROM CLIENTE, APORTACION
INNER JOIN APORTACION ON 
APORTACION.CLAVECLIENTE=CLIENTE.CLAVE
WHERE APORTACION.CLAVECLIENTE=1
esta debe de sumar lo aportado de un Cliente (Obviamente Cliente es la cabezera y el detalle pues es Aportacion) y lo hace bien cuando la tabla de detalles esta vacia pues al retornar $0 la consulta le asigno como aportacion el monto q adeuda el cliente (como el detalle es de abonos solo sugiero el abono pero es modificable); cuando tiene un abono o aportacion el cliente me envia exactamente el monto q q ha aportado, hasta ahi todo bien; sin embargo cuando se genera un tercer registro la consulta me devuelve el doble de la suma q deberia ser por ejemplo si los dos registros existentes son de 100 cada uno, la consulta me devuelve 400 en vez de 200 (100+100), la verdad no me explico por q sucede lo obvio es q existe un bug pero no logro detectarlo, espero y alguien lo encuentre.

Nota: La consulta es sobre una BD de Firebird 1.5.

Salu2.
Responder Con Cita
  #2  
Antiguo 05-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Estas incluyendo dos veces la tabla aportación

Código SQL [-]
SELECT SUM(APORTACION.PAGO) 
  FROM CLIENTE, APORTACION
       INNER JOIN APORTACION ON APORTACION.CLAVECLIENTE=CLIENTE.CLAVE
 WHERE APORTACION.CLAVECLIENTE=1

De hecho, como esta, si añadis una aportación de 100 al cliente 2, la suma te daría 500!!!

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 05-06-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
¿por qué no nos pones la estructura de las tablas? Tiene toda la pinta de que estás haciendo mal la join y se están duplicando los registros.... ¿Es posible que te estés dejando algun campo de la clave?
__________________
E pur si muove
Responder Con Cita
  #4  
Antiguo 05-06-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Cita:
Empezado por jachguate
Estas incluyendo dos veces la tabla aportación
Ups! pues es verdad... no me di cuenta del "detalle"
__________________
E pur si muove
Responder Con Cita
  #5  
Antiguo 05-06-2004
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
Gracias por la pronta y aceptada respuesta, solo un detalle q quiero aclarar. Cuando se hace un Join sobre una tabla,¿Debes de omitirla en la clausula FROM o porq esta caracteristica?. Tengo casi un mes usando SQL y ya lei dos manuales y no recuerdo haber leido sobre esta caracteristica. Por q debe ser asi?.

Salu2
Responder Con Cita
  #6  
Antiguo 05-06-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Existen dos maneras de hacer una join:

Código SQL [-]
select *
from tabla1 t1, tabla2 t2
where t1.campo1 = t2.campo2

Y

Código SQL [-]
select *
from tabla1 t1 join tabla2 t2
  on t1.campo1 = t2.campo2

Tú has hecho un mix de las dos
__________________
E pur si muove
Responder Con Cita
  #7  
Antiguo 05-06-2004
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
Vaya ya entiendo gracias por la aclaracion.

Salu2.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:42:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi