Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Por Favor verifiquen esta consulta pues no veo el error. (https://www.clubdelphi.com/foros/showthread.php?t=11101)

nefy 05-06-2004 17:24:11

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. :confused:

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

Salu2.

jachguate 05-06-2004 17:34:48

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.

;)

marto 05-06-2004 17:36:51

¿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?

marto 05-06-2004 17:37:53

Cita:

Empezado por jachguate
Estas incluyendo dos veces la tabla aportación

Ups! pues es verdad... no me di cuenta del "detalle" ;)

nefy 05-06-2004 17:45:24

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

marto 05-06-2004 17:56:39

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 ;)

nefy 05-06-2004 17:59:06

Vaya ya entiendo gracias por la aclaracion.

Salu2.


La franja horaria es GMT +2. Ahora son las 00:59:43.

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