别名MySQL中未知SELECT的名称

时间:2014-09-11 11:41:35

标签: mysql alias

我想在下面的查询中给出别名:

select x.* as rand_name , @rownum := @rownum + 1 as num from ( select t.names
from mask_data_name_dist t ) x, (select 
@rownum := 0) r

以上查询错误,因为我试图将别名 rand_name 添加到 x。* 有没有办法可以做到? 注意:我无法触摸子查询,内部查询是动态的,经常更改。例如,我已经硬编码了一个简单的select语句。 提前谢谢。

3 个答案:

答案 0 :(得分:0)

您只能在GROUP BY,ORDER BY或HAVING子句中使用列别名。

标准SQL不允许您引用WHERE子句中的列别名。强制执行此限制是因为执行WHERE代码时,可能尚未确定列值。

检查mysql文档:http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html

答案 1 :(得分:0)

您无法为*运算符提供别名,只能为一列提供别名:

SELECT rand_name , @rownum := @rownum + 1 as num
FROM   (SELECT t.names AS rand_name -- Note the alias here.
        FROM   mask_data_name_dist t ) x, 
       (SELECT @rownum := 0) r

编辑:
由于无法触及内部查询,因此可以将相同的内容应用于外部查询:

select x.names as rand_name , -- note the explicit column name
       @rownum := @rownum + 1 as num 
from   (select t.names mask_data_name_dist t ) x, 
       (select @rownum := 0) r

答案 2 :(得分:0)

x.*表示:表x中的所有列。它是一个集合,您无法在SQL中为集合添加别名。将正确的列名添加到SELECT列表并为该列添加别名或在子查询中添加别名

select
  x.*
  , @rownum := @rownum + 1 as num
from (
  select t.names AS rand_name
  from mask_data_name_dist t
) x,
(
  select 
  @rownum := 0
) r