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

consulta en mysql me repite datos.

Estas en el tema de consulta en mysql me repite datos. en el foro de Bases de Datos General en Foros del Web. SELECT distinct egresos_cojutepeque.num_tarjeta02, egresos_cojutepeque.valor_tarjeta02, egresos_cojutepeque.num_recibo_egreso, ref_tarj_cojutepeque.num_tarjeta, ref_tarj_cojutepeque.valor_tarjeta, ref_tarj_cojutepeque.num_recibo FROM ref_tarj_cojutepeque JOIN egresos_cojutepeque ON ((ref_tarj_cojutepeque.num_tarjeta = egresos_cojutepeque.num_tarjeta02) AND (ref_tarj_cojutepeque.valor_tarjeta = egresos_cojutepeque.valor_tarjeta02)) WHERE ((ref_tarj_cojutepeque.fecha_recibo >= '$fecha_ini') AND ...
  #1 (permalink)  
Antiguo 20/01/2011, 15:06
 
Fecha de Ingreso: octubre-2008
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 7
Busqueda consulta en mysql me repite datos.

SELECT distinct egresos_cojutepeque.num_tarjeta02, egresos_cojutepeque.valor_tarjeta02, egresos_cojutepeque.num_recibo_egreso, ref_tarj_cojutepeque.num_tarjeta, ref_tarj_cojutepeque.valor_tarjeta, ref_tarj_cojutepeque.num_recibo

FROM ref_tarj_cojutepeque JOIN egresos_cojutepeque

ON ((ref_tarj_cojutepeque.num_tarjeta = egresos_cojutepeque.num_tarjeta02) AND (ref_tarj_cojutepeque.valor_tarjeta = egresos_cojutepeque.valor_tarjeta02))

WHERE ((ref_tarj_cojutepeque.fecha_recibo >= '$fecha_ini') AND (ref_tarj_cojutepeque.fecha_recibo <= '$fecha_fin'))
AND ((egresos_cojutepeque.fecha_egreso >= '$fecha_ini') AND (egresos_cojutepeque.fecha_egreso <= '$fecha_fin'))

ver imagen de consulta
  #2 (permalink)  
Antiguo 20/01/2011, 15:41
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: consulta en mysql me repite datos.

Si te fijas la columna 4 de tu consulta no contiene datos repeditos por eso te regresa de ese modo la informacion y no puedes hacer un group by o un distinct porque los datos son distintos.

Pon un ejemplo de como estan tus tablas para poder ayudarte :)

Saludos!
  #3 (permalink)  
Antiguo 20/01/2011, 15:49
 
Fecha de Ingreso: octubre-2008
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: consulta en mysql me repite datos.

link de las imagenes de las tablas.

egresos_cojutepeque

ref_tarj_cojutepeque
  #4 (permalink)  
Antiguo 20/01/2011, 17:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: consulta en mysql me repite datos.

Mejor pon un ejemplo de los datos de cada tabla :)

Saludos!
  #5 (permalink)  
Antiguo 21/01/2011, 08:34
 
Fecha de Ingreso: octubre-2008
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: consulta en mysql me repite datos.

ejemplo de los datos de cada tabla

vista de datos egresos_cojutepeque

vista de datos ref_tarj_cojutepeque
  #6 (permalink)  
Antiguo 21/01/2011, 09:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: consulta en mysql me repite datos.

Y si agregas en tu query el valor de fecha_remesa? creo que asi podrias quitar tambien la duplicidad....

Saludos!
  #7 (permalink)  
Antiguo 21/01/2011, 09:21
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, 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)

Etiquetas: mysql
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 18:50.