我正在编写一个生成大型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
进行两次求值,是否有办法以仅评估一次的方式重写表达式?我已经研究过创建临时视图,但这似乎是在每次访问时重新评估子查询。