2012-01-16 163 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

相關問題