2012-01-16 90 views

回答

2

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

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

我要去接受你的答案,因为你已经回答了为什么它不与例如由于一吨工作的原因吧!我希望更多地了解mysql的工作原理:) – motto 2012-01-16 10:15:31

+0

@motto:谢谢。这是一般SQL(基于集合,声明式)而不仅仅是MySQL。 – gbn 2012-01-16 10:16:38

3

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

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

参考:Subqueries in the FROM Clause

+0

你有我给予好评的这个问题 – motto 2012-01-16 10:13:34

0

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

如果你真正的问题是不同的,请张贴它,也许你只是想这个错误

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

您的查询不起作用 – motto 2012-01-16 10:10:15

+0

是的,我错过了第二个别名。 – TecHunter 2012-01-16 10:23:44

0

为什么你想这样做吗?

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

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

我的问题是真正问题的简化版本,你的回答没有太大的帮助。 – motto 2012-01-16 10:21:38

+0

如果您不提供上下文,很难理解真正的问题! – Henrik 2012-01-18 08:07:21

0

它可能是z由查询引擎xy之前定义。这意味着z存在于xy之前。因此也是错误。

+1

你看过这个问题吗? – newtover 2012-01-16 10:13:49

+0

@newtover:wats错误? – Azodious 2012-01-16 10:16:02

+1

@审查后,看看你给的链接,我不知道这是如何与我的问题有关。你确定这是一个错误吗?这对我来说更可能是一个功能。 – motto 2012-01-16 10:20:31

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

哇,你已经得到了我对使用变量很好,不同的方法upvote,我非常密切地看你的答案和配置文件可能是我可以从你得到更多:) – motto 2012-01-16 10:17:19

+0

@motto,帮助自己! =) – newtover 2012-01-16 10:28:21

相关问题