Ver Mensaje Individual
  #7 (permalink)  
Antiguo 21/01/2011, 09:21
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: consulta en mysql me repite datos.

Veamoslo detalladamente:
Esta consulta:
Código MySQL:
Ver original
  1.     egresos_cojutepeque.num_tarjeta02,
  2.     egresos_cojutepeque.valor_tarjeta02,
  3.     egresos_cojutepeque.num_recibo_egreso,
  4.     ref_tarj_cojutepeque.num_tarjeta,
  5.     ref_tarj_cojutepeque.valor_tarjeta,
  6.     ref_tarj_cojutepeque.num_recibo
  7. FROM ref_tarj_cojutepeque
  8.     JOIN egresos_cojutepeque
  9.         ON ((ref_tarj_cojutepeque.num_tarjeta = egresos_cojutepeque.num_tarjeta02)
  10.         AND (ref_tarj_cojutepeque.valor_tarjeta = egresos_cojutepeque.valor_tarjeta02))
  11.     ((ref_tarj_cojutepeque.fecha_recibo >= '$fecha_ini') AND (ref_tarj_cojutepeque.fecha_recibo <= '$fecha_fin'))
  12.     AND
  13.     ((egresos_cojutepeque.fecha_egreso >= '$fecha_ini') AND (egresos_cojutepeque.fecha_egreso <= '$fecha_fin'));
te está devolviendo exactamente lo que estás pidiendo en ella. El problema es que el DISTINCT no actúa sobre el primer campo, sino sobre todo el registro... y como bien te dijeron ya, al menos una columna contiene valores diferentes al resto en cada uno de los registros donde los demás datos se repiten... por lo que en sí, los registros completos son diferentes.

El detalle que yo veo es que estás buscando coincidencias en el FROM que permiten la creación de productos cartesianos, como es el caso de tu propio ejemplo: egresos_cojutepeque contiene varias veces el mismo par de numero_tarjeta y valor_tarjeta, que son los campos en el ON, por lo que existe más de un registro que será devuelto en ese caso si el rango de las fechas coincide con el pedido.
Es evidente que si bien la relación puede ser la correcta, lo que estás planteando mal son los discriminantes de los datos, porque son insuficientemente discriminantes, además d que no estás realizando ninguna agrupación ni filtrado que permita evitar esas repeticiones.

Lo que creo que deberías hacer es plantear exactamente qué parámetros debe llevar el filtrado de la consulta, más allá del rango de fechas. Evidentemente eso es lo que falla.
Con la fecha, sólo te devolvería un registro en cada día si y sólo si puedes asegurar que la misma tarjeta no ha tenido más de una operación el mismo día...

En todo caso, ¿no deberías estar buscando los máximos, mínimos, sumas o medias de algo? De lo contrario, siempre se repetirían algunos de los datos de ciertas columnas. Es ievitable.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)