为什么该查询不能像我预期的那样工作?

时间:2012-01-16 10:01:04

标签: mysql

SELECT 3 AS x, 5 as y, (x+y) as z

我期望的结果;

x  y  z
3  5  8

我得到的结果;

#1054 - Unknown column 'x' in 'field list' 

6 个答案:

答案 0 :(得分:3)

您不能以这种方式引用列别名。尝试

SELECT (tmp.x + tmp.y) as z FROM (SELECT 3 AS x, 5 as y) tmp

参考:Subqueries in the FROM Clause

答案 1 :(得分:2)

SELECT子句(和列别名)同时进行评估,没有特定的顺序。也就是说,在你想要z的同一点上,x和y列还不存在。

SELECT
   (x+y) as z
FROM
    (
    SELECT 3 AS x, 5 as y
    ) t;

答案 2 :(得分:1)

SELECT @x:=3 as x, @y:=5 as y, (@x + @y) as z;

答案 3 :(得分:0)

因为您无法使用新创建的别名X作为选择器的一部分。请使用常量,因为您不需要别名或临时表,如其他答案。

如果你真正的问题不同请发布,也许你只是想错了

SELECT 3 AS x, 5 as y, (3+5) as z

答案 4 :(得分:0)

你为什么要这样做?

由于您的查询使用常量,因此工作正常。

SELECT 3 as x,5 as y,(3+5) as z;

答案 5 :(得分:0)

zx之前查询引擎可能会y定义z。这意味着xy之前存在{{1}}。因而错误。