Ver Mensaje Individual
  #7 (permalink)  
Antiguo 25/10/2011, 17:09
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: Consulta para tres tablas

La razón es simple: No puedes usar los alias de las columnas en el WHERE, porque el WHERE sólo acepta los nombres reales de las columnas.
Por otro lado, la solución que propones es correcta, ya que el el HAVING sí puede usar los alias, lo mismo que el ORDER BY y el GROUP BY. De todos modos, para lo que quieres hubisese sido suficiente con cambiar el segundo LEFT JOIN por INNER JOIN, ya que el INNER JOIN sólo devuelve registros si existe al menos un registro coincidente, que es precisamente lo que plantea ese HAVING.

Ten en cuenta que el uso de HAVING, GROUP BY y ORDER BY se paga con performance, porque se aplican luego de ejecutar toda la consulta, en cambio el INNER JOIN se produce al leer las tablas, lo que se hace antes que nada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)