25/10/2011, 17:09
|
| 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) |