2011-05-21 18 views
23

Estoy tratando de hacer algo como esto. Pero me da un error desconocido columna:¿Cómo alias un campo o columna en MySQL?

SELECT SUM(field1 + field2) AS col1, col1 + field3 AS col3 from core 

Básicamente, quiero sólo tiene que utilizar el alias de modo que no voy a necesitar para llevar a cabo las operaciones realizadas con anterioridad. ¿Es esto posible en mysql?

+0

¿De dónde viene 'col'? –

+0

typo, se supone que es col1 – user225269

+0

¿qué tipo de datos de 'field3'? – diEcho

Respuesta

13

considerar el uso de una subconsulta, como:

SELECT col1 
,  col1 + field3 AS col3 
FROM (
     SELECT field1 + field2 as col1 
     ,  field3 
     from core 
     ) as SubQueryAlias 
2

respuesta corta es no:

mysql> select 1 as a, a + 1 as b; 
ERROR 1054 (42S22): Unknown column 'a' in 'field list' 

postgresql# select 1 as a, a + 1 as b; 
ERROR: column "a" does not exist 

Dicho esto, algunas implementaciones SQL permiten utilizar los alias en donde/group/tienen cláusulas, por ejemplo:

postgresql# select 1 as a group by a; -- 1 row 
33

select @code:= SUM(field1 + field2), @code+1 from abc;

Pero, tenga en cuenta lo siguiente (del MySQL 5.6 docs):

As a general rule, other than in SET statements, you should never assign a value to a user variable and read the value within the same statement. For example, to increment a variable, this is okay:

SET @a = @a + 1; 

For other statements, such as SELECT, you might get the results you expect, but this is not guaranteed. In the following statement, you might think that MySQL will evaluate @a first and then do an assignment second:

SELECT @a, @a:[email protected]+1, ...; 

However, the order of evaluation for expressions involving user variables is undefined.

Por lo tanto, utilice bajo su propio riesgo.

+0

Eso es dulce azúcar sintáctica. :-) –

+0

+1 Frialdad. Siempre he hecho esto con subconsultas. –

+0

Lamentablemente, esto funciona brillantemente en una consulta, pero no en una vista :( – maxhugen

4

Según la respuesta de the spec Ravi Parekh no se garantiza que funcione siempre, como "orden de evaluación de las expresiones que implican variables de usuario no está definido".

Encontré this answer después de que traté de usar una variable y obtuve resultados raros.

3
select @code:= SUM(field1 + field2), (@code*1) from abc; 

@ código * 1 encubierta en expresión numérica y se puede utilizar en cualquier lugar como

select @code:= SUM(field1 + field2), (@code*1)+field3 from abc; 
+0

Vine aquí para votar, esto funciona perfectamente en nuestro escenario. Se reemplazó @code por una variable más húngara/estilo de código y se mantuvo el AS. '@fVariable: = SUM (columna) AS alias' (el alias debe estar encerrado en los backticks, SO no los procesa correctamente. – ReSpawN

+0

@ReSpawN Es un comportamiento indefinido. Resultó que le dio la respuesta que esperaba esa vez. código abierto, ciertos usos de lectura + escritura son seguros para una compilación en particular (si no lo considera una contradicción en términos) si inspecciona el código. – philipxy

12

Usted puede select el alias:

SELECT SUM(field1 + field2) AS col1, (select col1) + field3 AS col3 from core 

Esto funciona.

+0

No, esto no funciona. – fancyPants

+2

Funciona. Mismo problema y misma solución como este: http://stackoverflow.com/questions/2077475/using-an-alias-in-sql-calculations – dxvargas

+3

esto funciona muy bien en mysql .. no estoy seguro sobre otros dbs. debería ser la respuesta superior – billynoah

Cuestiones relacionadas