gpt4 book ai didi

sql - CTE 的意外结果

转载 作者:行者123 更新时间:2023-12-02 06:38:24 25 4
gpt4 key购买 nike

我创建了一个使用多个 CTE 的复杂流程(主要用于递归分层工作)。
在小样本数据集上,一切都按预期进行,但是当我将代码应用于大数据集时,我收到了意外(和错误)的结果。

我想我已经将范围缩小到 CTE。递归 CTE 是在几个早期 CTE 中处理的“馈送”数据,这似乎就是问题所在。

我设置了一个 sample data set如下:

  • 四行具有唯一数据
  • 每一行都会收到一个随机行号(这是在 CTE 中添加的

然后我获取第一个 CTE 的结果并在第二个 CTE 中执行自连接。
我希望所有行都加入,每一行都加入自己。实际发生的是不相等的行连接起来。

有人可以为这种行为提供解释吗?

最佳答案

这个结果没有什么出乎意料的,除非你不理解它。

每个 CTE 都被解析每次被引用。是的,这就是为什么在一个高度事务性表上的简单 CTE 可以在一个引用中返回 4 行,而在接下来的 2 个级别中返回 5 行。

然而,在您的示例中,这是因为 ORDER BY NEWID(),为原始 CTE 的每个分辨率提供了不同的 row_number()-ing。您是否认为 CTE 存储在内存中并缓存?在 SQLFiddle 站点上,在您的结果下,有一个“查看执行计划”链接。它显示了表格的 2 个不同的、单独的扫描

关于sql - CTE 的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12891637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com