我在要构建的查询中遇到了一个小问题。这个想法是基于对同一个旧表的连接来构建一个新表,在旧表中进行某种"昂贵"的计算。
问题
我不能在基础select的where(或on)子句中使用字段列表的计算结果(别名)。
为什么不重新计算
- 我想避免再次计算结果,因为这是一个150万的条目表,我加入了所有内容。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*
);
我已经考虑过使用函数或其他东西,但我认为在一个简单的查询中应该是可行的。
您是否尝试将内部查询再包装一级??
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*
);