2009-09-02 22 views
8

是否有任何解決方法,所以我可以實際做這樣的事情,而不必重複整個表達式或強制聯合或臨時表?我可以在MySQL查詢中重新使用表達式作爲另一個字段的變量嗎?

​​

自變量1,因爲作品MySQL如何,上述概念不能正常工作沒有定義,並提供給第2個項目。

我要麼必須重複variable2的表達式,要麼使用UNION或臨時表並使用兩遍。

有沒有一些技巧,我不知道要更有效地完成?

(請注意,我需要知道這兩個變量1和變量2,因爲他們然後被用於一個INSERT答案)

感謝您的想法!

+1

可能重複[我可以在一個SELECT查詢resuse計算字段?] (http://stackoverflow.com/questions/6085443/can-i-resuse-a-calculated-field-in-a-select-query) – 2015-09-08 09:13:26

回答

6

推到一個派生表的第一個計算:

select variable1 
    , complex_function(variable1, other_column) as variable2 
    , yet_another column 
    from (select complex_operation as variable1 
      , other_column 
      , yet_another_column 
      from whatever) dt 
+0

它比我想要的更混亂,但我會給你所有努力的最佳答案,謝謝。 – 2009-09-02 17:56:37

4
SELECT @v1:=(complex expression) AS variable1, 
     (complex expression * @v1) AS variable2 
+0

如果只是那麼簡單,我會感到震驚,弄清楚,但謝謝你! – 2009-09-02 14:59:36

+4

啊,你知道嗎?上面由knittl列出的手冊頁重複警告,不要使用或依賴於在同一個SELECT語句中設置的變量,因爲這些字段可能會按照WHERE等順序亂序執行,並且變量是從前一次執行中保留的。 因此,在同一個SELECT內重新使用變量可能是一個壞主意,它意味着順序查詢。 – 2009-09-02 15:10:58

+0

我個人從來沒有見過手冊中警告過的行爲,即使試圖實現它。但如果手冊警告它,那麼我不會使用它。 * bleh * – longneck 2009-09-02 16:19:23

0

我認爲唯一的辦法是重複你的第一個complex_expression,雖然我認爲mysql可以處理這種情況。

編輯:一個快速搜索變成了這樣:http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

+0

謝謝你的鏈接,不知怎的,我完全錯過了MySQL的那一部分! – 2009-09-02 15:00:34

+0

您的手冊鏈接對了解longneck解決方案存在缺陷的原因非常有幫助,再次感謝。 – 2009-09-02 15:13:36

相關問題