gpt4 book ai didi

SQL CTE 和 ORDER BY 影响结果集

转载 作者:行者123 更新时间:2023-12-02 14:37:41 26 4
gpt4 key购买 nike

我在下面粘贴了一个非常简化的 SQL 查询版本。我遇到的问题是 ORDER BY 语句影响了我的 CTE 的选择结果。我无法理解为什么会这样,我最初的想法是在 CTE 中,我执行一些 SELECT 语句,然后 ORDER BY 应该对这些结果起作用.

不幸的是,我看到的行为是我的内部 SELECT 语句受到 order by 的影响,给了我不在 TOP 10 中的“项目” >.

这是一个数据示例:(按ID倒序索引)

ID,   Date
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9594 2010-08-06
9593 2010-08-05
9592 2010-08-02
....
9573 2010-08-10
....
8174 2010-08-05
....
38 2029-12-20
<小时/>

我的基本查询:

;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results

查询返回:

ID,   Date
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9594 2010-08-06
9593 2010-08-05
9592 2010-08-02
<小时/>

我使用ORDER BY进行查询

;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results
ORDER BY Date DESC

查询返回:

ID,   Date
38 2029-12-20
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9573 2010-08-10
9594 2010-08-06
8174 2010-08-05

谁能解释一下为什么第一个查询只会返回表中前 10 个的 ID,而第二个查询会返回整个表的前 10 个(应用排序后)。

最佳答案

当您使用SELECT TOP n时,如果您想要确定性行为,则必须提供 ORDER BY,否则服务器可以自由返回任何 10 行。您所看到的行为完全有效。

要解决该问题,请在 CTE 内指定 ORDER BY:

WITH results AS
(
SELECT TOP 10 ID, Date
FROM dbo.items
ORDER BY ID DESC
)
SELECT ID
FROM results
ORDER BY Date

关于SQL CTE 和 ORDER BY 影响结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3924940/

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