我想在下面的查询中给出别名:
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语句。 提前谢谢。
答案 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