2011-06-22 30 views
0

我試圖使用MySQL's user defined variables,但由於限制,我不能像它演示一樣使用它們,其中一個查詢設置變量,第二個使用它。我的要求是能夠在查詢中多次使用它。相同的查詢MySQL用戶定義的變量

考慮以下幾點:

SELECT (Some Really Taxing Calculation) AS Total FROM Purchases 
WHERE Total < 55 AND itemName = "Bananas" 
OR Total > 90 AND itemName = "Apples" 
OR Total = 30 AND itemName = "Peaches" 
ORDER BY Total 

這將會是非常好的,只運行Total計算一次,然後多次使用該結果在整個查詢。現在,我在一個查詢中得到它的唯一方法就是爲它使用的每個地方重新運行它,因爲Total返回一個錯誤,指出使用了未知列。

+0

你能描述一下限制嗎? –

+0

如果將它放在FROM子句中,是不是隻計算一次,並且可以通過類似'total.Value'的值來獲取值。 – Dirk

+0

@Ryan Gross,單個查詢,我無法運行多個彼此相關的查詢。 – Robert

回答

1

着牀在一個子查詢的總計算...

SELECT 
    Total 
FROM 
    (SELECT (Some Really Taxing Calculation) AS Total, * FROM Purchases) AS Purchases 
WHERE Total < 55 AND itemName = "Bananas" 
    OR Total > 90 AND itemName = "Apples" 
    OR Total = 30 AND itemName = "Peaches" 
ORDER BY 
    Total 

注:子查詢(在線觀看)是由MySQL生成它的計劃展開時。將括號括在查詢中並不一定意味着你迫使它愚蠢地低效:)

0
SELECT *, total.Value 
FROM Purchases, (SELECT COUNT(*) as Value .... Some Really Taxing Calculation) total 
WHERE Total < 55 AND itemName = "Bananas" 
OR Total > 90 AND itemName = "Apples" 
OR Total = 30 AND itemName = "Peaches" 
ORDER BY Total 

因此,基本上,在FROM子句中進行嵌套SELECT類型查詢的計算,並給它一個總的名稱,然後在查詢中使用else。

+0

好吧,如果它使用基於行的計算,我必須在Total內重新創建該環境,所以基本上應用其他位置和連接兩次? – Robert

+0

如果你必須爲了獲得'一些真正的Taxing計算'的價值,那麼是的,你必須重新應用同樣的方法來加入。首先編寫計算查詢/語句(使用它需要的任何依賴關係),然後用parens包裝它並將其粘貼到另一個SQL查詢的FROM子句中。 – Dirk