我在下面粘贴了一个非常简化的 SQL 查询版本。我遇到的问题是ORDER BY
语句正在影响我的 CTE 的选择结果。我一直无法理解为什么会这样,我最初的想法是在 CTE 中,我执行了一些SELECT
声明,然后ORDER BY
应该致力于那些结果。
不幸的是,我看到的行为是我内心的SELECT
声明受到订单的影响,给我的“项目”不在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 个(应用排序后)。