2013-10-10 39 views
0

执行select 2*2 as 'm', (m*2) as 'n'回报“选择2 * 2为'm',(m * 2)为'n';”返回错误

/* SQL Error (1054): Unknown column 'm' in 'field list' */ 

有没有办法为列子句中使用列的别名?

也:

select sum(x) as sum, sum*2 as doubleSum from myTable; 
+0

已经回答了,停止编辑>< – AdrianBR

+0

@AdrianBR如何搞笑评论! – PHPst

+0

你一直在改变这个问题。如果在现有问题得到解答后您有其他问题,请发布其他问题。因为你的问题发生了变化,所以我没有对答案投票。 – AdrianBR

回答

2

您可以通过使用变量做到这一点,像

select @m:=2*2 as m, @m*2 as n 

- 你可能以后要使用n(实际上,这将是@n,你将能够使用,但不能直接n),那么这将是

select @m:=2*2 as m, @n:[email protected]*2 as n 
1

编辑:OP编辑问题

,如果你想要的参数,使用下面的语法

select @m:=2 as m, @m+1 as n 

select @m:=2*2 as 'm', (@m*2) as 'n' 

在现实生活中的例子,也适用此

select @sum:=sum(impression) as sum, (@sum)*2 as doubleSum from kpi_funnel; 
+0

neg voter,关心评论?他编辑了他的问题3次 – AdrianBR

+0

是Alma Do Mundo的回答后的第一个编辑? – PHPst

+0

是的,你可以检查历史 – AdrianBR

2

你可以做到这一点与一个子查询:

select m, (m*2) as n 
from 
(
    select 2*2 as m 
) sub_query 
+0

子查询增加时间,不必要 – AdrianBR

+0

@AdrianBR但同时它将在其他DBMS工作,因为它是一个有效的SQL,不依赖DBMS特有的功能,如MySQL变量 –

+0

问题是MySQL的。如果你有一个很好的原生函数,并且不需要可移植性,为什么你会使用一个更慢的变体 – AdrianBR