2009-11-03 24 views
0

我想以這種形式使用MySQL:子查詢是重用變量的唯一選項嗎?

SELECT 1 AS one, one*2 AS two 

,因爲它是更短的和甜比

SELECT one*2 AS two FROM (SELECT 1 AS one) AS sub1 

但前者似乎並沒有工作,因爲它預計,一個是一列。

有沒有更簡單的方法來完成沒有子查詢的效果?

而且不,SELECT 2 AS two不是一個選項。 ;)

回答

2
select @one := 1 as one, 2 * @one as two; 

user-defined variables

+3

太好了,謝謝。沒有學習新事物就沒有一天過去了。 – pestaa 2009-11-03 19:23:53

3

考慮從SQL的角度來看,這SQL代碼

SELECT 1 AS one, one*2 AS two 

語言(爲什麼不,MySQL已經符合ISO/ANSI的良好記錄SQL標準),您的one不是一個變量;而是列相關名稱。您不能使用SELECT子句中的相關名稱具有相同的範圍,因此是錯誤。

FWIW當你使用MS Access數據庫引擎時,你的「更短更甜」的語法確實有用 - 是你學習它的地方嗎?可悲的是,Access數據庫引擎在遵守標準方面的記錄很差。據說需要很長時間去學習Access-speak並學習SQL代碼;)

+0

不,我其實很討厭Access-speak,所以我不必忘記它 - 但我的假設來自編程語言,這引起了這種誤解。謝謝您的回答!在接受答案後很難看到富有洞察力的帖子。 – pestaa 2009-11-04 12:00:40

相關問題