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

Evitar datos repetidos en consulta

Estas en el tema de Evitar datos repetidos en consulta en el foro de Mysql en Foros del Web. Saludos a todos, tengo el siguente inconveniente: Estoy realizando una consulta sql con 3 trablas (prestamos, pagos y cliente) la idea es mostrar algunos datos ...
  #1 (permalink)  
Antiguo 06/11/2015, 07:28
Avatar de heberthm  
Fecha de Ingreso: noviembre-2013
Ubicación: Cali
Mensajes: 65
Antigüedad: 10 años, 4 meses
Puntos: 1
Pregunta Evitar datos repetidos en consulta

Saludos a todos, tengo el siguente inconveniente: Estoy realizando una consulta sql con 3 trablas (prestamos, pagos y cliente) la idea es mostrar algunos datos de cada tabla en un listado (CRUD) el inconveniente que tengo es la consulta me arroja un listado con datos repetidos.
Aqui la consulta:
Código MySQL:
Ver original
  1. SELECT DISTINCT (A.cedula), A.No_pago,   A.fecha,  P.No_cuotas, P.valor_prestamo, P.valor_cuotas, P.saldo, P.cuotas_pagadas,  
  2.    P.valor_cuotas, P.saldo,  (P.valor_prestamo - P.valor_cuotas - A.abono) AS total_saldo,
  3.    A.abono, A.multa,  P.cedula,  DATEDIFF (CURDATE(), P.fecha ) AS cuota_por_pagar, P.cuotas_pagadas,
  4.    C.nombre, C.apellido1, C.apellido2, DATE_ADD( P.fecha, INTERVAL 30 DAY) AS dias_por_pagar
  5. FROM prestamos P
  6. LEFT JOIN pagos A ON A.cedula = P.cedula
  7. LEFT JOIN clientes C ON  C.cedula = P.cedula WHERE P.saldo > 0  ORDER BY P.fecha ASC LIMIT $inicial,$cantidad ";

De antemano agrdezco la colaboración.
__________________
Hebeth Mazuera

Última edición por gnzsoloyo; 06/11/2015 a las 07:51
  #2 (permalink)  
Antiguo 06/11/2015, 08:02
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, 4 meses
Puntos: 2658
Respuesta: Evitar datos repetidos en consulta

Estás creando una relación en estrella, que tiende a generar productos cartesianos.
La relación entre Préstamo y Cliente debería ser por INNER JOIN, no LEFT JOIN. Sólo tendría sentido un LEFT JOIN si existiesen prestamos por fuera de la cartera de clietnes... cosa bastante anormal.
Adem{ás no estas teniendo cuidado con el manejo de los nulos en las operaciones aritméticas. El NULL no es un dato, y si lo sumas a un valor cualquiera, o lo concatenas a una cadena de texto, el resultado es NULL.

Probemos así:
Código MySQL:
Ver original
  1.     C.cedula,
  2.     A.No_pago,  
  3.     A.fecha,  
  4.     P.No_cuotas,
  5.     P.valor_prestamo,
  6.     P.valor_cuotas,
  7.     P.saldo,
  8.     P.cuotas_pagadas,  
  9.     P.valor_cuotas,
  10.      P.saldo,  
  11.     (P.valor_prestamo - P.valor_cuotas - IFNULL(A.abono, 0)) total_saldo,
  12.     A.abono,
  13.     A.multa,
  14.      P.cedula,
  15.     DATEDIFF (CURDATE(), P.fecha ) cuota_por_pagar,
  16.     P.cuotas_pagadas,
  17.     C.nombre,
  18.     C.apellido1,
  19.     C.apellido2,
  20.     DATE_ADD( P.fecha, INTERVAL 30 DAY) dias_por_pagar
  21. FROM prestamos P
  22.     INNER JOIN clientes C ON  C.cedula = P.cedula
  23.     LEFT JOIN pagos A ON C.cedula = A.cedula
  24. WHERE P.saldo > 0  
  25. ORDER BY P.fecha ASC
  26. LIMIT $inicial,$cantidad;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/11/2015, 08:25
Avatar de heberthm  
Fecha de Ingreso: noviembre-2013
Ubicación: Cali
Mensajes: 65
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Evitar datos repetidos en consulta

Gracias gnzsoloyo, probaré las segurencias que me has dado.
__________________
Hebeth Mazuera

Etiquetas: fecha, join, repetidos, select, sql, tabla
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 03:59.