我有这样的话:
SELECT
cansa1.NAME,
mod(cansa1.PRODUCT_ID, 1000000) prodIdHash
FROM CANSA_TABLE cansa1
INNER JOIN CUSER_TABLE cuser1 ON cansa1.PRODUCT_ID = cuser1.PRODUCT_ID
AND mod(cansa1.PRODUCT_ID, 1000000) = cuser1.PRODUCT_HASH
这个查询是有效的,但是我想替换mod()函数的第二次出现(在内部连接中),以避免执行它两次。我尝试用select子句中的别名替换它,但是不起作用。我可以使用什么方法来使这个查询不重复mod()函数呢?
对不起,我的英语
2条答案
按热度按时间h43kikqp1#
不必担心执行两次,SQL引擎将优化查询,并决定是缓存函数值,还是执行两次,最后重写查询,使执行的查询与写入的查询具有不同的结构,因为它已确定这样做会更有效。
如果你真的想重写它,那么:
但是,SQL引擎可能会重写查询并将函数推送到外部作用域,因此您可能需要一个看似无关的筛选条件来具体化内部查询并强制不重写计算:
然而,这看起来确实像是一个过早优化的案例。在尝试应用可能不需要的优化之前,你应该首先检查是否真的存在问题。
trnvg8h32#
您可以使用 * 派生表 *(即
FROM
子句中的子查询):