2012-01-18 119 views
0

我遇到了一個小問題,我想構建一個查詢。 這個想法是基於在同一個舊錶上進行某種「昂貴」計算的聯接構建新表。如何在底層select-join語句中使用create table語句的列別名?

問題

我不能使用字段列表的計算結果(別名)在哪裏(或上)的基本選擇的子句。

爲什麼不重新計算一次?

  • 我想避免再次計算結果,因爲它是一個1.5 Mio條目表,我加入了一切。 on子句中還有一些條件,但它並沒有真正影響操作的數量。所以我寧願不要每次加入兩次。
  • 我剛纔想如果可能的話:)

SQL語句

CREATE TABLE `newTable` AS (
    SELECT (*COMPUTATION*) AS `calculated` 
    FROM oldTable AS t1 
    JOIN oldTable as t2 ON (
     t1.user != t2.user 
     AND *other conditions* 
    ) 
    WHERE `calculated` < *some number* 
); 

我已經想到了使用功能或別的什麼,但我認爲這應該是可行的一個簡單的查詢。

回答

1

你有沒有嘗試包裝你的內部查詢一個更多的水平?

CREATE TABLE `newTable` AS 
( select PreQuery.Calculated 
     from (SELECT (*COMPUTATION*) AS `calculated` 
       FROM oldTable AS t1 
       JOIN oldTable as t2 ON 
        (t1.user != t2.user 
        AND *other conditions* 
        )) PreQuery 
     where PreQuery.Calculated < *some number* 
); 
+0

確實,你是對的。在嘗試了你的主張之後,再加上一些更多的想法之後,這件事情就顯而易見了。謝謝! – PvB 2012-01-19 00:49:36

相關問題