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

Como acceder a una columna ya generada

Estas en el tema de Como acceder a una columna ya generada en el foro de Mysql en Foros del Web. Como puedo acceder a una columna auto generada en un vista? SELECT Columna1, (Columna2 + Columna3) AS NuevaColumna, NuevaColumna * Factor AS Calculado FROM miTabla ...
  #1 (permalink)  
Antiguo 26/01/2013, 14:26
 
Fecha de Ingreso: enero-2011
Mensajes: 49
Antigüedad: 13 años, 3 meses
Puntos: 0
Pregunta Como acceder a una columna ya generada

Como puedo acceder a una columna auto generada en un vista?

SELECT Columna1, (Columna2 + Columna3) AS NuevaColumna, NuevaColumna * Factor AS Calculado FROM miTabla

En este ejemplo cuando quiero generar la columna Calculado me da un error de que NuevaColumna no existe

Esto yo lo pudiera solucionar con variables

SELECT Columna1, @lnNuevaColumna := (Columna2 + Columna3) AS NuevaColumna, @lnNuevaColumna * Factor AS Calculado FROM miTabla

Pero en las vistas no me deja poner variables.

Alguna otra solución
  #2 (permalink)  
Antiguo 26/01/2013, 17:10
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Como acceder a una columna ya generada

porque complicarse tanto no es mas facil hacer esto?

SELECT Columna1, (Columna2 + Columna3) AS NuevaColumna, (Columna2 + Columna3)* Factor AS Calculado FROM miTabla

Saludos
  #3 (permalink)  
Antiguo 26/01/2013, 19:24
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, 4 meses
Puntos: 2658
Respuesta: Como acceder a una columna ya generada

Es una forma. Algo rústica, que puede no ser aplicable en todos los casos.
Pero el problema central también es que hay que tener siempre en cuenta una restricción de los alias que existe en todos los sistemas de bases de datos, y no sólo en MySQL: No se puede usar como columna de un SELECT un alias que se crea en el mismo SELECT, ni tampoco se puede usar en en WHERE dentro de la misma consulta.
Eso significa que tienes dos opciones: La que @shaserUsa te propone (algo rústica y puede que no sea funcional siempre), o bien transformar el resultado de parte de la consulta como tabla derivada en el FROM:
Código MySQL:
Ver original
  1. SELECT Columna1, (NuevaColumna * Factor Calculado) Calculado
  2.     (SELECT
  3.         Columna1,
  4.         (Columna2 + Columna3) NuevaColumna,
  5.         Factor
  6.     FROM miTabla) tabla2

En cuanto al uso de variables, es un arma de doble filo. Sirven, pero como son permanentes dentro de la misma sesión de MySQL, pueden terminar arrastrando basura (datos obsoletos), si no se las maneja correctamente.
A las variables hay que dominarlas bien antes de usarlas, para evitar problemas inesperados.
Fuera de eso, son poderosas.
__________________
¿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 27/01/2013, 15:38
 
Fecha de Ingreso: enero-2011
Mensajes: 49
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Como acceder a una columna ya generada

Hola a todos gracias por contestar.

El problema esta en que tengo varias columnas por calcular que dependen de otras
Lo que estoy pensando hacer es crear una primera Vista llamado Vista_Base

SELECT Columna1, (Columna2 + Columna3) AS NuevaColumna, (Columna2 + Columna3)* Factor AS Calculado FROM miTabla

Y luego sobre esta consulta hacer los otros caculos

SELECT *, (Calculado * 2.5) AS Otro FROM Vista_Base

Pero no se cuan lenta sera tener dos Vistas Anidadas

Saludos
  #5 (permalink)  
Antiguo 27/01/2013, 17:06
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, 4 meses
Puntos: 2658
Respuesta: Como acceder a una columna ya generada

Y por qué no haces subconsultas en el FROM para ir generando las sumatorias, como te lo propongo.
El resultado sería el mismo, pero sólo requeriría una sola llamada a la base.

Un tip: Las cláusula AS ya es obsoleta desde hace años, sólo se conserva por compatibilidad con sistemas antiguos. No se requiere a menos que estés usando un DBMS extremadamente viejo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 27/01/2013, 19:26
 
Fecha de Ingreso: enero-2011
Mensajes: 49
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Como acceder a una columna ya generada

Gracias gnzsoloyo voy a probar lo que me sugeriste

Una consulta extra

Cuando creo una Vista y luego consulto esa vista mediante un SELECT * FROM Vista el MySQL hace doble consulta?

Saludos

Etiquetas: columna, 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 14:59.