Ver Mensaje Individual
  #7 (permalink)  
Antiguo 14/03/2013, 03:48
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: 17 años
Puntos: 2658
Respuesta: Una simple operacion COUNT(), y hay un error xD ¿WHY?

El problema es un tema recurrente en este foro, es decir, no es l aprimera vez que le pasa a alguien, y es un tanto complicado de explicar bien.
En esencia es que estás haciendo un doble LEFT JOIN, con dos tablas apuntando a la misma, y ese tipo de consultas tiende a producir proyectos cartesianos, cuando no errores al usar funciones agregadas.
Tu consulta (un poco más limpia) es así:
Código MySQL:
Ver original
  1.     P.nombre,
  2.     COUNT(V.Puntuacion) Puntos,
  3.     AVG(C.nota) MediaNota
  4. FROM Proyectos P
  5.     LEFT JOIN Votos V ON P.ProyectoID = V.targetid
  6.     LEFT JOIN Criticas C ON P.ProyectoID = C.targetID
  7. WHERE P.ProyectoID = 1
  8. GROUP BY P.nombre
Cuando usas dos LEFT JOIN sobre la primera tabla, ambos operan en forma independiente, por lo que en realidad pueden producirse agregaciones de registros provenientes del segundo que ya están en el primero.
¿Se entiende?
Eso es simplemente porque el segundo left join no está teniendo en cuenta los resultados del primero.
Normalmente en estos casos lo que se debe hacer es que el segundo left join se vincule con la tabla resultado del primero, pero para ello la relación no debería ser con la tabla Proyectos, sino con la tabla Votos.
Obviamente hay un problema con eso: Si Las Críticas son de los Proyectos, y no tienen relación con los votos, entonces se volverían incompatibles las condiciones.
¿Se va entendiendo?
Ese es el tema central: Si no hay una relación entre Votos y Críticas, no puedes esta consulta así. Habría que construirla de otra forma completamente diferente.

Nota: En todo Foro (no sólo FDW), históricamente se ha considerado como "grito" si:
1) Escribes todo en mayúsculas.
2) Pones el texto más grande del estándar del editor.
3) Resaltas notoriamente con color un texto determinado.

Ya tienes los etiquetados, las negritas, los subrayados y las cursivas. ¿Para qué necesitas el resto?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)