如何在底层select-join语句中使用create table语句的列别名?

时间:2012-01-18 11:07:16

标签: mysql select create-table

我遇到了一个我想要构建的查询的小问题。 我们的想法是在同一个旧表上基于连接构造一个新表,在那里进行某种“昂贵”的计算。

问题

我无法在基础选择的where(或on)子句中使用字段列表的计算结果(别名)。

为什么不再计算?

  • 我想避免再次计算结果,因为它是一个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 个答案:

答案 0 :(得分: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*
);