sql server top关键字返回不同的结果

nszi6y05  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(377)

我有一个对表的t-sql查询,需要在其中返回最上面的行。在mysql中,这是按预期工作的,但是在sqlserver中,我得到了一个不同的返回数据,这是相当令人费解的。
我附带了三个屏幕截图:1个是表设计,1个是仅查看前10行时返回的数据,1个是查看前1000行时返回的数据。您将注意到最上面的行包含两个查询之间的name列的不同信息。
查询中唯一的区别是 TOP 关键字。此表共有7行数据。结果与 Top 1000 包含返回的行的正确顺序。这是怎么回事?
为什么SQLServer会根据返回行的计数值更改返回行的顺序 TOP 关键字?有人能解释或提供一种方法来保持一致性,而不管返回多少行吗?


laximzn5

laximzn51#

Order by 不能保证为相等的值提供相同的结果,因为sql表表示无序集。因为你们的宽度是一样的,所以你们得到的结果是不同的。
要获得唯一的结果或使排序稳定,需要添加一个列名,如 itemNumber 给你的 order by 条款。

ne5o7dgx

ne5o7dgx2#

输出中没有差异或问题。您是按宽度排序的,前两个宽度是相同的,并且您没有任何子排序,因此它将决定权留给rdbms(特别是它的查询优化器)来呈现哪一个
您还应该添加 itemNumber 给你的 ORDER BY 后面的子句 Width ```
ORDER BY Width, itemNumber

eqqqjvef

eqqqjvef3#

为了在这个问题中添加一些上下文,我试图实现mysql和mssql在返回的行顺序上的一致性。我正在将一个使用mysql的项目转换为mssql,这给我带来了一个问题。得到我想要的东西的解决办法是使用 Set Rowcount 1 限制返回的行数。这产生了1行数据,其排序方式与mysql相同。

相关问题