当我执行以下查询时,我希望结果是两个相同的数字。但这是两个不同的数字。
with t as (SELECT RAND())
SELECT * FROM t
UNION ALL
SELECT * FROM t;
我正在使用类似的过程来尝试随机化治疗和控制,我认为 CTE 正在存储结果,但它似乎正在存储对函数的引用,并且该函数每次查询时都会重新滚动 rand()稍后在 CTE 链中。为什么数字不一样?
我在 Google 上搜索了“sql cte 何时评估”这一短语,并得到了大量回复。 在每个回复中,信息都是相同的:
SQL 中的公用表表达式 (CTE) 每次被引用时都会进行评估。
这感觉很清楚......如果您在查询中引用 CTE 两次,那么它将可以自由地被评估两次。