我打算在没有任何合适数据列用于order-by子句的查询中使用 ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
。
通常情况下,如果我使用有效列数据的 ORDER BY
,ROW_NUMBER()
的排序将会完全相同。但是,如果使用 ORDER BY (SELECT NULL)
,ROW_NUMBER()
的排序方式会发生什么变化?每次执行时是否都会改变排序方式?
如果排序不会改变(从我的测试结果来看,排序不会改变),这样做是可行的吗?
我打算在没有任何合适数据列用于order-by子句的查询中使用 ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
。
通常情况下,如果我使用有效列数据的 ORDER BY
,ROW_NUMBER()
的排序将会完全相同。但是,如果使用 ORDER BY (SELECT NULL)
,ROW_NUMBER()
的排序方式会发生什么变化?每次执行时是否都会改变排序方式?
如果排序不会改变(从我的测试结果来看,排序不会改变),这样做是可行的吗?
如果没有显式的ORDER BY
子句,可能会在不同的执行中得到特定行的不同ROW_NUMBER()
。使用ORDER BY (SELECT NULL)
也是一种绕过语法要求的黑科技或者语法糖,它并不能强制排序。
你现在得到了相同的结果,但是并没有保证。
ROW_NUMBER() OVER ()
ROW_NUMBER() OVER (ORDER BY NULL)
使用ORDER BY (SELECT NULL)进行排序的执行结果与对普通表进行排序的执行结果相同。
ORDER BY (SELECT NULL)
的约定,但我猜测你不应该依赖它。 - Tim BiegeleisenORDER BY
。因此,您可以使用row_number() over ()
。row_number() over (order by (select null))
是MS Sql Server的解决方法,它要求在ROW_NUMBER中使用非文字的ORDER BY
。 - LukStorms