如何在MySQL中对字段或列进行别名?

use*_*269 30 mysql alias subquery

我正在尝试做这样的事情.但是我得到一个未知的列错误:

SELECT SUM(field1 + field2) AS col1, col1 + field3 AS col3 from core
Run Code Online (Sandbox Code Playgroud)

基本上,我想只使用别名,这样我就不需要执行先前执行的操作了.这可能在mysql中吗?

Rav*_*ekh 35

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

但是,请注意以下内容(来自MySQL 5.6文档):

作为一般规则,除了在SET语句中,您不应该为用户变量赋值并在同一语句中读取值.例如,要增加变量,这没关系:

SET @a = @a + 1;
Run Code Online (Sandbox Code Playgroud)

对于其他语句,例如SELECT,您可能会得到您期望的结果,但这不能保证.在下面的语句中,您可能会认为MySQL将首先评估@a,然后再进行一次分配:

SELECT @a, @a:=@a+1, ...;
Run Code Online (Sandbox Code Playgroud)

但是,涉及用户变量的表达式的评估顺序是未定义的.

因此,使用风险自负.

  • @Melvin RTFM http://dev.mysql.com/doc/refman/5.6/en/user-variables.html"...对涉及用户变量的表达式的评估顺序是未定义的." 实际上我通过上面的查询得到NULL. (3认同)

And*_*mar 20

考虑使用子查询,例如:

SELECT col1
,      col1 + field3 AS col3 
FROM   (
       SELECT  field1 + field2 as col1
       ,       field3
       from    core
       ) as SubQueryAlias
Run Code Online (Sandbox Code Playgroud)


小智 13

你可以select别名:

SELECT SUM(field1 + field2) AS col1, (select col1) + field3 AS col3 from core
Run Code Online (Sandbox Code Playgroud)

这有效.

  • 这在mysql中很有用..不确定其他dbs.应该是最佳答案 (3认同)
  • 有用.与此问题相同的问题和解决方案:http://stackoverflow.com/questions/2077475/using-an-alias-in-sql-calculations (2认同)
  • 如果您引用的列是根据“SELECT MAX(ID) AS c1, (SELECT c1) AS c2 FROM log GROUP BY ID”中的组函数计算的,则这不起作用(“对组函数的引用”错误) -但是,如果在此示例中将“MAX(ID)”替换为“ID”,它会起作用。 (2认同)

小智 5

select @code:= SUM(field1 + field2), (@code*1) from abc;
Run Code Online (Sandbox Code Playgroud)

@code*1 转换为数字表达式,您可以在任何地方使用,例如

select @code:= SUM(field1 + field2), (@code*1)+field3 from abc;
Run Code Online (Sandbox Code Playgroud)