CTE(With语句)是否允许在PostgreSQL中消除常见的子表达式?

问题描述 投票:1回答:1

我正在编写一个生成大型SQL表达式和复杂查询的系统。为了我自己的理智,我让代码生成器使用WITH表达式来简化代码并使其更具可读性(它仍然产生的恐怖的一个例子是:https://pastebin.com/UZJ01Q19

在某些地方,我想重复使用复杂子表达式的结果任意次数,我想知道绑定表达式被计算了多少次,例如

WITH ... AS <DoSetup>,
 intermediate AS <ComplexQuery>
SELECT a, b FROM 
    (SELECT * FROM intermediate WHERE ...)
    UNION
    (SELECT * FROM intermediate WHERE ...)

如果在此表达式中对ComplexQuery进行两次求值,是否有办法以仅评估一次的方式重写表达式?我已经研究过创建临时视图,但这似乎是在每次访问时重新评估子查询。

postgresql common-table-expression
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.