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

[SOLUCIONADO] Fallo tonto, valores repetidos en consulta

Estas en el tema de Fallo tonto, valores repetidos en consulta en el foro de Mysql en Foros del Web. Hola a todos. LLevo un rato dando vueltas a una consulta y no consigo sacar los datos como quiero. La cosa es que tengo registradas ...
  #1 (permalink)  
Antiguo 12/04/2013, 06:59
 
Fecha de Ingreso: mayo-2011
Mensajes: 74
Antigüedad: 13 años, 7 meses
Puntos: 2
Pregunta Fallo tonto, valores repetidos en consulta

Hola a todos.

LLevo un rato dando vueltas a una consulta y no consigo sacar los datos como quiero. La cosa es que tengo registradas dos peticiones de amistad y una validacion de correo, tendria que salirme 2 peticiones y 1 de correo pero no es asi, si no que me salen 2 y 2.

La consulta es la siguiente:

Código MySQL:
Ver original
  1. UW.ID_USER AS USUARIO_WEB,
  2. COUNT(PET.ID_USER) AS PETICIONES_AMISTAD,
  3. COUNT(MV.ID_USER) AS VERIFICACION_MAIL
  4. USUARIO_WEB UW
  5. LEFT JOIN (SELECT ID_USER FROM PETICION_AMISTAD WHERE VISTO='0') PET ON UW.ID_USER=PET.ID_USER
  6. LEFT JOIN MAIL_VERIFICACION MV ON UW.ID_USER=MV.ID_USER
  7. WHERE UW.ID_USER='xuturk';

Y el resultado el siguiente:

USUARIO_WEB
PETICIONES_AMISTAD
VERIFICACION_MAIL
xuturk
2
2

¿Que estoy haciendo mal?

Un saludo!

Gracias!

Última edición por gnzsoloyo; 12/04/2013 a las 07:10
  #2 (permalink)  
Antiguo 12/04/2013, 07:22
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Fallo tonto, valores repetidos en consulta

Hola xuturk:

El uso de varios LEFT JOIN's en una misma consulta pueden acarrear resultados como los que presentas si no se definen correctamente las condiciones del ON y del WHERE. Postea los datos que tienes en cada una de tus tres tablas para poder darte otra alternativa para tu consulta

Saludos
Leo.
  #3 (permalink)  
Antiguo 12/04/2013, 07:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Fallo tonto, valores repetidos en consulta

Es un problema recurrente. Estás creando una consulta en estrella y no en cadena, porque la tercera tabla no está tomando los resultados del primer LEFT JOIN sino que se relaciona con la tabla inicial.
Si no existe una dependencia funcional entre las tres tablas, no puedes integrarlas a la misma consulta.
Para lograr lo que quieres tienes que transformar el primer LEFT JOIN en una tabla y hacer que la tercera tabla se relacione con la tabla derivada.
Código MySQL:
Ver original
  1.     T1.usuario_web,
  2.     T1.peticiones_amistad,
  3.     COUNT(MV.ID_USER) VERIFICACION_MAIL
  4.       (SELECT
  5.              UW.ID_USER,
  6.              COUNT (PET.ID_USER) PETICIONES_AMISTAD,
  7.         FROM USUARIO_WEB UW
  8.              LEFT JOIN PETICION_AMISTAD PET ON UW.ID_USER = PET.ID_USER
  9.        WHERE VISTO = 0
  10.          AND UW.ID_USER = 'xuturk') T1
  11.        LEFT JOIN MAIL_VERIFICACION MV ON T1.ID_USER = MV.ID_USER;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 12/04/2013, 09:28
 
Fecha de Ingreso: mayo-2011
Mensajes: 74
Antigüedad: 13 años, 7 meses
Puntos: 2
Respuesta: Fallo tonto, valores repetidos en consulta

Muchas gracias.

Ya lo he solucionado con tu solucion, gnzsoloyo,

A ver como lo apaño ya que esa consulta es una porcion de una entera jajaj y me ocupa mucho, pero almenos ya entiendo por que era y ya se como juntar el resto de tablas.

Muchas gracias :)

Etiquetas: fallo, join, repetidos, select
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 13:16.