2013-08-28 171 views
0

我希望能夠在查詢中創建臨時變量 - 而不是存儲過程或函數 - 不需要聲明和設置,以便我不需要通過我稱之爲查詢參數。在查詢中創建臨時變量

試圖向這方面努力:

Select field1, 
     tempvariable=2+2, 
     newlycreatedfield=tempvariable*existingfield 
From 
     table 
從這個

離開:

DECLARE @tempvariable 
SET @tempvariable = 2+2 
Select field1, 
     [email protected]*existingfield 
From 
     table 

謝謝您的時間

我可能過於複雜的例子;更簡單地說,以下給出無效列名QID

Select 
QID = 1+1 
THN = QID + 1 

如果這是在一個查詢中,是否有解決方法?子查詢

Select field1, tempvariable, 
     (tempvariable*existingfield) as newlycreatedfield 
from (select t.*, (2+2) as tempvariable 
     from table t 
    ) t; 

不幸的是,MySQL有實際實例化的傾向(即創建)派生表:

+0

有你不想使用存儲過程的原因? – acutesoftware

+0

如果我已經完成了,我可能會這樣做,但是這幾行代碼會包含數以千計的其他計算數據,並且這些數據會在更大的查詢中出現。謝謝 – user2723494

回答

0

你可以做這樣的事情:

SELECT field1, tv.tempvariable, 
     (tv.tempvariable*existingfield) AS newlycreatedfield 
FROM table1 
INNER JOIN (SELECT 2+2 AS tempvariable) AS tv 

見SQLFIDDLE:

SELECT var.QID, 
(var.QID + 1) AS THN 
FROM (SELECT 1+1 as QID) AS var 

見SQLFIDDLE:http://www.sqlfiddle.com/#!2/8b0724/8/0

而在你的簡化,例如指http://www.sqlfiddle.com/#!2/d41d8/19140/0

+1

完美。 我結束了使用第一個例子,但我的查詢迫使我加入它的東西,所以我只是,「ON 1 = 1」。 – user2723494

1

你可以用子查詢做到這一點。大多數其他數據庫足夠聰明以避免這種情況。

你可以賭的是下面的工作:

Select field1, (@tempvariable := 2+2) as tempvariable, 
     (@tempvariable*existingfield) as newlycreatedfield 
From table t; 

這是一場賭博,因爲MySQL不能保證第二個參數之前,第三估算的。它似乎在實踐中起作用,但不能保證。

+0

這很有趣也很有幫助。我感謝你的迴應。 – user2723494

+0

第二次賭博拋出「必須聲明標量變量tempvariable」錯誤。 – user2723494

+0

而第一個拋出「無效列名」 – user2723494