SQL CTE和ORDER BY影响结果集
发布时间:2020-12-12 07:47:20 所属栏目:MsSql教程 来源:网络整理
导读:我在下面粘贴了一个非常简化的SQL查询版本.我遇到的问题是ORDER BY语句正在影响我的CTE的选择结果.我无法理解为什么会这样,我最初的想法是在CTE中,我执行一些SELECT语句,然后ORDER BY应该对THOSE结果起作用. 不幸的是,我看到的行为是我的内部SELECT语句受到顺
我在下面粘贴了一个非常简化的SQL查询版本.我遇到的问题是ORDER BY语句正在影响我的CTE的选择结果.我无法理解为什么会这样,我最初的想法是在CTE中,我执行一些SELECT语句,然后ORDER BY应该对THOSE结果起作用.
不幸的是,我看到的行为是我的内部SELECT语句受到顺序的影响,给了我不在TOP 10中的“项目”. 以下是数据示例: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |